服务X从Y安装卷,这不是服务或容器的名称
使用docker-compose我试图创build一个共享卷,我的两个服务都可以使用。 我有我docker-compose.yml
的以下docker-compose.yml
version: '2' volumes: bundler: driver: local sidekiq: build: . volumes_from: - bundler:/.bundle web: build: . volumes_from: - bundler:/.bundle
然而,这不起作用,并给我:
错误:服务“sidekiq”从“bundler”装载卷,而不是服务或容器的名称。
使用docker-compose做这件事的正确方法是什么?
我想你在这里混合了两个概念。
-
当一个容器有一些应该用于存储的卷(已安装或未安装)时,将使用
volumes_from
。 然后,您可以通过引用所谓data-only-container
必须指向容器或(组合)服务名称的volumes_from
data-only-container
容器来使用此容器的卷。 -
另一方面,
volumes
用于引用本地文件夹或命名卷。 然后,必须在撰写文件的顶层条目volumes
中声明一个已命名的volumes
,就像你已经做过的那样。
所以在你的情况下,从volumes_from
到volumes
的切换应该是volumes_from
的。 有关详细信息,请参阅参考文档: https : //docs.docker.com/compose/compose-file/#/volumes-volume-driver
答案应该是
version: '2' volumes: bundler: driver: local sidekiq: build: . volumes: - bundler:/.bundle web: build: . volumes_from: - sidekiq:rw
所以sidekiq是你所谓的data-container
,公开和创buildbundler
卷。 然后你把这个卷装在你需要的所有其他容器中,就你现在的web而言。 希望这可以帮助
“volumes_from”引用一个容器。 由于您使用的是已命名的卷,因此您需要“卷”:
version: '2' volumes: bundler: driver: local services: sidekiq: build: . volumes: - bundler:/.bundle web: build: . volumes: - bundler:/.bundle
此外,由于您使用的是版本2,因此您需要在自己的services:
指定services:
部分而不是yml的顶层。