通过docker-compose文件版本“3”挂载主机目录并重新使用数据卷

我有Docker命令来创build一个容器,然后使用该容器的名称与–volumes-from来运行另一个容器,它工作正常 –

docker create -v /home/dev/docker/my/config:/home/myuser/4.0/config --name shared-config my/configurator:4.0.0 

以上将从image my / configurator:4.0.0创build一个名为shared-config的新容器

当试图运行任何其他容器(比如my / oms:4.0.0)时,我可以简单地使用来自名为shared-config的容器中的卷,使用–volumes-from

 docker run --volumes-from shared-config -p 8083:8080 -d my/oms:4.0.0 

使用–volumes –我们可以使用该卷多次,其中所需的容器。

直到这里一切似乎很好。

现在,我正在尝试使用文件格式版本“3”在docker-compose中执行上述操作,但无法理解创build后如何重新使用数据卷 。 因为根据docker- compose在版本3他们已经停止使用–volumes-from 。 他们说 –

要在服务之间共享卷,请使用顶层卷选项定义它,并使用服务级卷选项从每个共享该服务的服务引用它。

在上面的声明中,他们指的是已命名的卷,请从这里查阅 。

但我只想将主机目录挂载为数据卷并重新使用该数据卷。 我的问题是如何通过docker-compose文件版本“3”来重用这个数据卷。 最简单的,对于我想通过docker-compose运行的每个服务,我可以在服务级别使用卷密钥

 version: "3" services: my-oms: image: my/oms:4.0.0 ports: - "8083:8080" volumes: - /home/dev/docker/my/config:/home/myuser/4.0/config 

但是如果我想在不同的服务中使用我的主机目录(/ home / dev / docker / my / config)作为数据卷。 我应该有每个服务的音量键,或者实际上在docker-compose版本“3”中有一个更好的方法,我可以在其他服务中重用数据卷(我们如何使用–volumes-from)。

任何指针或build议或我错过了什么?

避免重复语法的最佳select是使用扩展选项扩展 docker-compose.yml:

所以你可以有一个common-services.yml,看起来像:

 version: "3" services: generic-vol: volumes: - /home/dev/docker/my/config:/home/myuser/4.0/config 

然后你的docker-compose.yml得到更新如下:

 version: "3" services: my-oms: extends: file: common-services.yml service: generic-vol image: my/oms:4.0.0 ports: - "8083:8080" 

请注意, docker stack deploy -c docker-compose.yml可能不支持所有这些选项,我遇到了使用variables和多个docker-compose文件为我的项目的问题。 解决scheme是使用docker-compose将文件parsing为堆栈部署可以与docker-compose config >docker-compose.stack.yml ,然后将该yml文件传递给您的堆栈部署。

第二种select是利用yml语法本身的function。 它允许锚和参考这些锚。 该语法如下所示:

 version: "3" services: my-oms: image: my/oms:4.0.0 ports: - "8083:8080" volumes: &common-vol - /home/dev/docker/my/config:/home/myuser/4.0/config my-xyz: image: my/xyz:4.0.0 ports: - "8888:8080" volumes: *common-vol 

第一个&common-vol创build一个锚点,后面的*common-vol是对yml数据的同一部分的引用。