使用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执行此操作的正确方法是什么?
答案 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"