如何在docker撰写

时间:2017-08-26 21:32:01

标签: docker docker-compose

我想定义一个通用的挂载卷 - 以及我想让它关联的所有选项 - 可以在多个服务中重用。事实上,我正在开发一个项目,它使用相同的源来处理几个微服务。 这样,卷的管理和修改就会更加简单。

首先,我使用了利用volumes_from的旧方式:

shared:
  image: phusion/baseimage 
  volumes:
    - ./code:/var/www/html

nginx:
  build: docker/nginx
  ports:
    - "8080:80"
  links:
    - php
  volumes_from:
    - shared

这很有效,但我必须定义shared服务才能使其正常工作。从3.0版开始,可以使用volumes,因此我想定义一般卷并将其用于我的nginx服务,但我找不到正确的语法:

version: '3.3'

volumes:
  vol_test:
    type: bind
    source: ./code
    target: /var/www/html
    volume:
      nocopy: true

services:
  nginx:
    build: docker/nginx
    ports:
      - "8080:80"
    volumes:
      - vol_test

更新

我发现以我想要的方式定义卷是不可能的,因为以下定义:

volumes:
  data-volume:
    type: bind
    source: ./code
    target: /var/www/html
    volume:
      nocopy: true
调用docker-compose up

将生成此输出:

ERROR: The Compose file './docker-compose.yml' is invalid because:
volumes.data-volume value Additional properties are not allowed ('volume', 'source', 'type', 'target' were unexpected)

我想我仍然需要使用volumes_from方式。任何人都可以证实吗?

2 个答案:

答案 0 :(得分:1)

您不必再使用volume_from了。形成 https://docs.docker.com/compose/compose-file/#volumes

  

但是,如果您想在多个服务中重用卷,那么   在顶级卷键中定义命名卷。使用命名卷   服务,群组和堆栈文件。

他们甚至专门解决您的问题:

  

注意:顶级卷键定义了一个命名卷,并从每个服务的卷列表中引用它。这取代了   在早期版本的Compose文件格式中的volumes_from。见使用   卷和卷插件,用于卷的一般信息。

因此,对于MWE,我定义了一个空卷并在两个服务中引用它。这是撰写文件:

version: '3.3'

volumes:
  vol_test:

services:
  reader:
    image: ubuntu
    tty: true
    command: bash -c "sleep 1; cat /volume/file;exit 0"
    volumes:
      - vol_test:/volume

  writer:
    image: ubuntu
    tty: true
    command: bash -c "date | tee /volume/file; exit 0"
    volumes:
      - vol_test:/volume

这给了我们以下行为:

$ date; docker-compose up
So 27. Aug 11:54:13 CEST 2017
Creating network "dockercomposetest_default" with the default driver
Creating dockercomposetest_writer_1 ... 
Creating dockercomposetest_reader_1 ... 
Creating dockercomposetest_writer_1
Creating dockercomposetest_reader_1 ... done
Attaching to dockercomposetest_writer_1, dockercomposetest_reader_1
writer_1  | 27 09:54:15 UTC 2017
reader_1  | 27 09:54:15 UTC 2017
Gracefully stopping... (press Ctrl+C again to force)

答案 1 :(得分:0)

我可以确认您的观察结果:如果您要安装主机目录,则必须使用绑定安装语法。