在 Docker Compose 中自动创建网络

新手上路,请多包涵

在 Docker 中使用自定义网络时

networks:
  default:
    external:
      name: service-tier

并尝试运行它,我得到了错误

错误:网络服务层声明为外部,但找不到。请使用 docker network create service-tier 手动创建网络,然后重试。

是否可以使用 docker-compose 自动创建网络,或者除了首先手动创建它们之外别无他法?

原文由 Marian Klühspies 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

external 是使用现有网络。如果你想组成网络,你只需这样做:

 networks:
  network1:
  network2:

.. 指示 compose 制作网络。它们将被命名为 <compose-dir>-<network name> 使用 docker network ls 验证创建。

您还可以覆盖默认网络或指定更多属性。

 networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.driver.mtu: 1450

.. 将默认网络设置 MTU 覆盖为 1450(当主机的 mtu 低于 1500 并且路径 mtu 发现无法正常工作时非常方便)。还有 其他桥驱动程序选项

external 当您希望两个组合设置中的服务相互通信或者您有一个手动创建的网络时更有意义。

原文由 Grimmy 发布,翻译遵循 CC BY-SA 3.0 许可协议

正如 @Grimmy 正确指出的那样,docker 创建了所有提到的网络,因此以后可以通过运行另一个撰写文件来引用这些网络。

但是,默认生成的网络名称几乎不实用或健壮。因为它可能会变得很长,或者 docker 团队改变了他们对命名策略的看法。

但是由于撰写文件版本 3.5 (意思是 docker-compose 版本 1.18.0 )可以随意命名网络,所以整体解决方案更加健壮。

请参阅以下片段,演示如何实现此目的:

编写文件 1

 version: '3.5'
services:
  svc-name:

    ...

    networks:
      - specific-network-name
    container_name: "exact-container-reference"

    ...

networks:
  specific-network-name:
    external: false
    name: specific-network-name

编写文件 2

 version: '2'
services:

  svc-using-svc-name:

    ...

    networks:
      - default
      - specific-network-name
    external_links:
      - exact-container-reference

    ...

networks:
  specific-network-name:
    external: true

原文由 helvete 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏