服务X从Y安装卷,这不是服务或容器的名称

时间:2016-08-16 20:49:40

标签: docker docker-compose

使用docker-compose尝试创建一个我的两个服务都可以使用的共享卷。我的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执行此操作的正确方法是什么?

4 个答案:

答案 0 :(得分:2)

我认为你在这里混合了两个概念。

    当一个容器有一些应该用于存储的卷(已安装或未安装)时,使用
  • volumes_from。然后,您可以通过引用所谓的data-only-container volumes_from来使用此容器的卷,volumes必须指向容器或(撰写)服务名称。

  • 另一方面,
  • volumes用于引用本地文件夹或命名卷。然后必须在您撰写文件的顶级条目volumes_from中声明一个命名卷。

因此,在您的情况下,从volumes切换到map<unsigned long, int*> newMap; newMap[13] = new int(1340); cout << "test 1:" << endl; cout << &(*(newMap.begin())) << endl; cout << &(*(newMap.end())) << endl; cout << &(*(newMap.rbegin())) << endl; cout << &(*(newMap.rend())) << endl; cout << "test 2:" << endl; for(map<unsigned long, int*>::reverse_iterator it=newMap.rbegin();it!=newMap.rend();){ cout << "next iteration" << endl; map<unsigned long, int*>::reverse_iterator entry = it; it++; delete entry->second; newMap.erase(entry->first); } 应该可以解决问题。有关详细信息,请参阅参考文档:https://docs.docker.com/compose/compose-file/#/volumes-volume-driver

答案 1 :(得分:1)

答案应该是

version: '2'
volumes:
  bundler:
    driver: local
sidekiq:
  build: .
  volumes:
    - bundler:/.bundle
web:
  build: .
  volumes_from:
    - sidekiq:rw

所以sidekiq就是你所谓的data-container,暴露并创建了bundler卷。然后将此卷安装在您需要的所有其他容器中,就像现在的Web一样。希望这有帮助

答案 2 :(得分:0)

“volumes_from”引用容器。由于您使用的是命名卷,因此需要“卷”:

version: '2'
volumes:
  bundler:
    driver: local
services:
  sidekiq:
    build: .
    volumes:
      - bundler:/.bundle
  web:
    build: .
    volumes:
      - bundler:/.bundle

此外,由于您使用的是版本2,因此您需要在自己的services:部分中指定服务,而不是yml的顶级。

答案 3 :(得分:0)

如果您确实要将 volumes_from 与容器(仅限数据)一起使用,请使用

volumes_from:
 - container:"yourdataonlycontainer"