docker swarm:在没有外部的堆栈之间共享网络

时间:2017-08-10 14:22:19

标签: docker-compose docker-swarm

我正在使用docker compose在Docker swarm上部署多个堆栈。

现在我已在我的代理堆栈撰写文件中定义了一个网络:

networks:
  proxy:
    driver: overlay

其他堆栈以下列方式引用此网络:

networks:
  proxy_proxy:
    external: true

此设置的问题是所有其他堆栈现在依赖于代理堆栈。删除代理堆栈(例如,为了替换/重新启动它)将导致如下错误:

  

无法删除网络800w54tbh7w7clc4o8uc3y7no:来自守护程序的错误响应:rpc错误:代码= 9 desc =网络800w54tbh7w7clc4o8uc3y7no正在使用服务0zu489jepz586sguqrorv6j6h无法从堆栈中删除一些资源:proxy

有没有办法在docker compose中定义一个不是"拥有"通过一个堆栈,如果它已经存在任何新部署的堆栈将加入它,如果它没有它将被创建?

这样,堆栈之间就没有依赖关系了。

1 个答案:

答案 0 :(得分:5)

我相信在这种情况下,网络对您的群集来说是全局的,并不是任何特定堆栈的一部分。

我建议您使用docker network create手动创建它,并在任何地方将其称为external

要创建,我建议使用一些配置工具(如Ansible或Salt)或shell脚本手动在任何主节点上运行。关键是,如果您不得不重建群集或创建克隆,则不必记住详细信息(或者您需要创建此网络的事实)。我认为没有办法create a compose file with just networks,因此是一个shell脚本推荐。