我想定义一个通用的挂载卷 - 以及我想让它关联的所有选项 - 可以在多个服务中重用。事实上,我正在开发一个项目,它使用相同的源来处理几个微服务。 这样,卷的管理和修改就会更加简单。
首先,我使用了利用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
方式。任何人都可以证实吗?
答案 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)
我可以确认您的观察结果:如果您要安装主机目录,则必须使用绑定安装语法。