gpt4 book ai didi

networking - 在 docker compose 中使用主机网络和其他网络

转载 作者:IT老高 更新时间:2023-10-28 12:46:56 25 4
gpt4 key购买 nike

我正在尝试为我的项目设置开发环境。

我有一个容器 (ms1) 应该放在他自己的网络中(在我的例子中是“服务”),还有一个容器(apigateway)应该访问该网络,同时将 http 端口暴露给主机的网络。

理想情况下,我的 docker compose 文件应如下所示:

version: '2'
services:
ms1:
expose:
- "13010"
networks:
services:
aliases:
- ms1
apigateway:
networks:
services:
aliases:
- api
network_mode: "host"
networks:
services:

docker-compose 不允许同时使用 network_mode 和 networks。

我还有其他选择吗?

目前我正在使用这个:

   apigateway:
networks:
services:
aliases:
- api
ports:
- "127.0.0.1:10000:13010"

然后 apigateway 容器监听 0.0.0.0:13010。它可以工作,但速度很慢,如果主机的 Internet 连接中断,它就会死机。

另外,我计划将来在 docker 上使用 vagrant,它允许以干净的方式解决吗?

最佳答案

expose 在 docker-compose does not publish the port on the host .由于您可能不再需要服务链接(相反,您应该像已经做的那样依赖 Docker 网络),因此该选项的值(value)通常有限,并且在您的场景中似乎对您没有任何值(value)。

怀疑您是误用了它,在意识到它本身似乎没有任何效果之后,偶然发现使用主机网络驱动程序会“使这行得通”。请注意,这与 expose 属性无关。只是主机网络驱动程序让包含的进程直接绑定(bind)到主机网络接口(interface)。因此,您可以从外部访问 API 网关进程。您可以删除 expose 属性,它仍然可以工作。

如果这是您选择主机网络驱动程序的唯一原因,那么您已成为 X-Y problem 的受害者。 :

(tl;dr)在正常情况下,您永远不需要使用主机网络驱动程序,默认的网桥网络驱动程序可以正常工作。您正在寻找的是 ports属性,而不是 expose。这会在后台设置适当的端口转发。

关于networking - 在 docker compose 中使用主机网络和其他网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36142239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com