+-
Docker Compose – 在多个容器之间共享命名卷
我正在使用docker-compose和v3.我正在尝试在docker中安装一个卷:

./appdata:/appdata

我希望将其作为卷,然后从多个容器引用该卷. volume configuration reference仅显示数据量:作为命名卷,没有值,因此它看起来不像上面那样.

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

这给了我:

ERROR: In file ‘./docker-compose.yml’, volume ‘app-volume’ must be a mapping not a string.

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

我还检查了volumes_from,但这实际上只允许从其他容器继承.我见过有人在包含他们想要的映射的另一个容器上使用volumes_from,但是使用命令:true set,以便容器永远不会实际运行,这对我来说就像是一个黑客.

我怎样才能做到这一点?

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

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

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

最佳答案
可以通过以下方式跨容器共享指定的卷:

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:
点击查看更多相关文章

转载注明原文:Docker Compose – 在多个容器之间共享命名卷 - 乐贴网