一尘不染

Docker Compose-在多个容器之间共享命名卷

docker

我正在使用docker-compose和v3。我正在尝试在Docker中挂载卷:

./appdata:/appdata

我想将此作为卷,然后从多个容器中引用该卷。的卷配置参考仅示出了data-volume:作为命名体积,用没有值,因此它不会像以上。

services:

    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes:
            - app-volume

    php:
        build: ./php/
        expose:
            - 9000
        volumes:
            - app-volume

volumes:
     app-volume: ./appdata:/appdata

这给了我:

错误:在文件“ ./docker-compose.yml”中,卷“ app-volume”必须是映射而不是字符串。

显然,我知道我需要更改volumes键/值对,但是我不确定 如何 更改它,以便可以在服务之间共享卷。

我也已经签出,volumes_from但这实际上只允许从其他容器继承。我见过有人volumes_from在另一个容器上使用该容器,该容器包含他们想要的映射,但是command: true设置了该容器,使该容器永远不会真正运行,在我看来,这就像是黑客。

我怎样才能做到这一点?


注意,我 确实 有以下工作:

nginx:
    volumes:
        - ./appdata:/appdata
php:
    volumes:
        - ./appdata:/appdata

但这只是重复,我希望命名卷可以帮助我避免:-)


阅读 946

收藏
2020-06-17

共1个答案

一尘不染

可以通过以下方式在容器之间共享命名卷:

services:
    nginx:
        build: ./nginx/
        ports:
            - 80:80
        links:
            - php
        volumes:
            - app-volume:location_in_the_container

    php:
        build: ./php/
        expose:
            - 9000
        volumes:
            - app-volume:location_in_the_container

volumes:
     app-volume:

这是我用来更好理解的示例配置。我将从web容器中生成的静态文件暴露给一个名为的卷static- content,然后由该nginx容器读取并提供服务:

services:
  nginx:
    container_name: nginx
    build: ./nginx/

    volumes:
      - static-content:/usr/src/app

  web:
    container_name: web
    env_file: .env
    volumes:
      - static-content:/usr/src/app/public
    environment:
      - NODE_ENV=production

    command: npm run package

volumes:
  static-content:
2020-06-17