服务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_fromvolumes的切换应该是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的顶层。