【问题标题】:docker-compose v3 share the same volume mount locations between multiple containersdocker-compose v3 在多个容器之间共享相同的卷挂载位置
【发布时间】:2017-07-26 03:35:55
【问题描述】:

之前我使用volumes_from 将多个卷位置挂载到多个容器,如下所示:

app:
  image: mageinferno/magento2-nginx:1.11-1
  links:
    - phpfpm
  volumes_from:
    - appdata
  ports:
    - 8000:80

phpfpm:
  image: mageinferno/magento2-php:7.0-fpm-1
  links:
    - db
  volumes_from:
    - appdata

appdata:
  image: tianon/true
  volumes:
    - /var/www/html
    - ~/.composer:/var/www/.composer
    - ./html/app/code:/var/www/html/app/code
    - ./html/app/design:/var/www/html/app/design

但是,在 docker-compose 版本 3 中,当使用本机卷挂载时,volumes_from 不可用,这导致我执行以下操作:

version: "3"

services:
  app:
    image: mageinferno/magento2-nginx:1.11-1
    links:
      - phpfpm
    volumes:
      - appdata:/var/www/html
      - ~/.composer:/var/www/.composer
      - ./html/app/code:/var/www/html/app/code
      - ./html/app/design:/var/www/html/app/design
    ports:
      - 8000:80

  phpfpm:
    image: mageinferno/magento2-php:7.0-fpm-1
    links:
      - db
    volumes:
      - appdata:/var/www/html
      - ~/.composer:/var/www/.composer
      - ./html/app/code:/var/www/html/app/code
      - ./html/app/design:/var/www/html/app/design

有什么方法可以将同一组卷挂载引用到多个服务,而无需定义两次?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    YAML 支持“锚点”来重用位:(来自 https://learnxinyminutes.com/docs/yaml/

    # YAML also has a handy feature called 'anchors', which let you easily duplicate
    # content across your document. Both of these keys will have the same value:
    anchored_content: &anchor_name This string will appear as the value of two keys.
    other_anchor: *anchor_name
    
    # Anchors can be used to duplicate/inherit properties
    base: &base
        name: Everyone has same name
    
    foo: &foo
        <<: *base
        age: 10
    
    bar: &bar
        <<: *base
        age: 20
    

    【讨论】:

    • 太棒了。当我想传入一个数组时,我确实不得不改变一些事情。采用这样的格式:version: "3" services: app: volumes: &amp;appvolumes - appdata:/var/www/html - ~/.composer:/var/www/.composer - ./html/app/code:/var/www/html/app/code - ./html/app/design:/var/www/html/app/design phpfpm: volumes: *appvolumes
    【解决方案2】:

    这是一个 docker-compose 版本 3 示例,其中锚点用于 环境 变量。

    这些值在第一次使用时设置,然后在使用相同环境变量的任何其他服务中引用。

    注意 &environment 用于设置锚点,*environment 用于引用它。

    version: '3'
    services:
      ui:
        build:
          context: ./ui
        ports:
          - 80:80
          - 8080:8080
        networks:
          - cluster-net
        environment: &environment
          A_VAR: 'first-var'
          ANOTHER_VAR: 'second-var'
      api:
        build:
          context: ./api
        networks:
          - cluster-net
        environment: *environment
    
    networks:
      cluster-net:
        driver: bridge
    

    【讨论】:

      猜你喜欢
      • 2017-11-01
      • 1970-01-01
      • 2018-06-27
      • 2017-12-30
      • 2017-12-03
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多