docker swarm:在没有外部的情况下在堆栈之间共享网络
docker swarm: share a network between stacks without external
我正在使用 docker 组合在 Docker 集群上部署多个堆栈。
现在我已经在我的代理堆栈组合文件中定义了一个网络:
networks:
proxy:
driver: overlay
其他堆栈通过以下方式引用此网络:
networks:
proxy_proxy:
external: true
此设置的问题是所有其他堆栈现在都依赖于代理堆栈。删除代理堆栈(例如为了 replace/restart 它)将导致这样的错误:
Failed to remove network 800w54tbh7w7clc4o8uc3y7no: Error response from daemon: rpc error: code = 9 desc = network 800w54tbh7w7clc4o8uc3y7no is in use by service 0zu489jepz586sguqrorv6j6hFailed to remove some resources from stack: proxy
有没有一种方法可以在 docker compose 中定义一个网络而不是 "owned" 一个堆栈,这样如果它已经存在,任何新部署的堆栈都会加入它,如果它不存在它会被创建吗?
这样堆栈之间就没有依赖关系了。
我相信在这种情况下,网络对您的集群来说是全局的,并不是任何特定堆栈的一部分。
我建议使用 docker network create
手动创建它并在任何地方都将其称为 external
。
要创建,我建议在任何主节点上手动使用一些配置工具(如 Ansible 或 Salt)或 shell 脚本 运行。关键是,如果您需要重建集群或创建克隆,您将不必记住细节(或创建此网络所需的事实)。我不认为有 create a compose file with just networks 的方法,因此推荐 shell 脚本。
我正在使用 docker 组合在 Docker 集群上部署多个堆栈。
现在我已经在我的代理堆栈组合文件中定义了一个网络:
networks:
proxy:
driver: overlay
其他堆栈通过以下方式引用此网络:
networks:
proxy_proxy:
external: true
此设置的问题是所有其他堆栈现在都依赖于代理堆栈。删除代理堆栈(例如为了 replace/restart 它)将导致这样的错误:
Failed to remove network 800w54tbh7w7clc4o8uc3y7no: Error response from daemon: rpc error: code = 9 desc = network 800w54tbh7w7clc4o8uc3y7no is in use by service 0zu489jepz586sguqrorv6j6hFailed to remove some resources from stack: proxy
有没有一种方法可以在 docker compose 中定义一个网络而不是 "owned" 一个堆栈,这样如果它已经存在,任何新部署的堆栈都会加入它,如果它不存在它会被创建吗?
这样堆栈之间就没有依赖关系了。
我相信在这种情况下,网络对您的集群来说是全局的,并不是任何特定堆栈的一部分。
我建议使用 docker network create
手动创建它并在任何地方都将其称为 external
。
要创建,我建议在任何主节点上手动使用一些配置工具(如 Ansible 或 Salt)或 shell 脚本 运行。关键是,如果您需要重建集群或创建克隆,您将不必记住细节(或创建此网络所需的事实)。我不认为有 create a compose file with just networks 的方法,因此推荐 shell 脚本。