首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker在多个容器之间组合共享命名卷

Docker在多个容器之间组合共享命名卷
EN

Stack Overflow用户
提问于 2017-05-31 12:11:22
回答 4查看 156.3K关注 0票数 170

我用的是码头写作和v3。我正试着在码头装一卷:

./appdata:/appdata

我想把这个作为一个卷,然后从多个容器中引用这个卷。卷配置参考只将data-volume:显示为一个命名的卷,没有值,因此它不像上面所示。

代码语言:javascript
运行
复制
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-come.yml’中,卷‘app-册’必须是映射而不是字符串。

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

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

我该怎么做?

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

代码语言:javascript
运行
复制
nginx:
    volumes:
        - ./appdata:/appdata
php:
    volumes:
        - ./appdata:/appdata

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-07-13 10:31:30

名为“卷”的停靠库已从版本3开始删除。

但是,您可以使用扩展字段来避免复制卷源,并防止您将来输入:

代码语言:javascript
运行
复制
version: '3.5'

x-services-volume:
  &services-volume
  type: bind
  source: ./appdata
  target: /appdata

services:

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

    php:
        build: ./php/
        expose:
            - 9000
        # Use same way as for nginx if target override not needed.
        volumes:
            - <<: *services-volume
            target: /opt/target-override

注意:这个特性可以从3.4版本的文件格式开始使用。

票数 27
EN

Stack Overflow用户

发布于 2017-05-31 12:35:01

命名卷可以通过以下方式跨容器共享:

代码语言:javascript
运行
复制
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容器读取和提供该卷:

代码语言:javascript
运行
复制
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:
票数 201
EN

Stack Overflow用户

发布于 2017-05-31 12:28:24

这无需使用命名卷就可以解决这个问题:

代码语言:javascript
运行
复制
      volumes:
          - ./appdata:/appdata

所以,看起来:

代码语言:javascript
运行
复制
services:

  nginx:
      build: ./nginx/
      ports:
          - 80:80
      links:
          - php
      volumes:
          - ./appdata:/appdata

  php:
      build: ./php/
      expose:
          - 9000
      volumes:
          - ./appdata:/appdata
票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44284484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档