如何在Docker中定义一个通用挂载点

我想定义一个通用挂载量 – 以及我希望关联的所有选项 – 可以在多个服务中重复使用。 实际上,我正在开发一个项目,使用几个微服务的相同来源。 这样,音量将更容易pipe理和修改。

首先,我使用了从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方式。 有人可以证实吗?

我可以确认你的观察:如果你想挂载主机目录,你必须使用bind mount语法。

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

但是,如果要跨多个服务重用卷,请在顶级卷密钥中定义一个命名卷。 使用命名卷与服务,群集和堆栈文件。

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

注:顶级卷密钥定义一个命名卷,并从每个服务的卷列表中引用它。 这会replace早期版本的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)