【问题标题】:docker swarm: share a network between stacks without externaldocker swarm:在没有外部的堆栈之间共享网络
【发布时间】:2017-08-10 14:22:19
【问题描述】:

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

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

networks:
  proxy:
    driver: overlay

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

networks:
  proxy_proxy:
    external: true

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

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

有没有办法在 docker compose 中定义一个不由一个堆栈“拥有”的网络,这样如果它已经存在,任何新部署的堆栈都会加入它,如果不存在,它将被创建?

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

【问题讨论】:

标签: docker-compose docker-swarm


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多