我正在使用docker compose在Docker swarm上部署多个堆栈。
现在我已在我的代理堆栈撰写文件中定义了一个网络:
networks:
proxy:
driver: overlay
其他堆栈以下列方式引用此网络:
networks:
proxy_proxy:
external: true
此设置的问题是所有其他堆栈现在依赖于代理堆栈。删除代理堆栈(例如,为了替换/重新启动它)将导致如下错误:
无法删除网络800w54tbh7w7clc4o8uc3y7no:来自守护程序的错误响应:rpc错误:代码= 9 desc =网络800w54tbh7w7clc4o8uc3y7no正在使用服务0zu489jepz586sguqrorv6j6h无法从堆栈中删除一些资源:proxy
有没有办法在docker compose中定义一个不是"拥有"通过一个堆栈,如果它已经存在任何新部署的堆栈将加入它,如果它没有它将被创建?
这样,堆栈之间就没有依赖关系了。
答案 0 :(得分:5)
我相信在这种情况下,网络对您的群集来说是全局的,并不是任何特定堆栈的一部分。
我建议您使用docker network create
手动创建它,并在任何地方将其称为external
。
要创建,我建议使用一些配置工具(如Ansible或Salt)或shell脚本手动在任何主节点上运行。关键是,如果您不得不重建群集或创建克隆,则不必记住详细信息(或者您需要创建此网络的事实)。我认为没有办法create a compose file with just networks,因此是一个shell脚本推荐。