gpt4 book ai didi

ip - 如何将 docker 容器端口转发到主机

转载 作者:行者123 更新时间:2023-12-01 23:47:00 27 4
gpt4 key购买 nike

我正在尝试“dockerize”一个 LAMP 应用程序,但我在发送电子邮件时遇到了问题。我有 2 个容器,一个用于 apache/php,另一个用于 mysql。一切正常,但我无法发送任何电子邮件。我已经在 apache 容器上安装了 sendmail,但它需要连接到 smtp 服务器。

我用谷歌搜索了一下,大多数答案是“设置你自己的 MTA 容器”,然而,我在 Ubuntu 上运行 docker,并且已经有一个 MTA 设置(我可以发送电子邮件并使用 sendmail盒子)。所以想法是使用主机smtp服务器。

应该可以设置一个“隧道”或“路由”(我不确定这个术语)以将到端口 25 的连接从容器内部转发到主机的端口 25(基本上是相反的) docker 用 -p 做了什么)。我已经阅读了 docker 高级网络和“ip”命令手册,但我不知道该怎么做。

目前我的解决方案是使用--net=host 创建所有容器。这样sendmail就可以看到宿主机的smpt服务器了。此方法的问题是:您不能同时使用 --link--net=host,因此意味着所有容器都必须使用 --net=host.

最佳答案

您想从容器内访问主机。你已经可以做到这一点。例如,如果运行 Docker 的主机是 docker.mb14.com然后您可以从容器中访问该地址。

但这会给你一个面向外部的界面,你可能不想听那个。相反,您可以使用面向内部的接口(interface),并在容器内使用 --add-host <alias>:<ip> 给它一个友好的名称。 .这将添加一个 /etc/hosts输入就像--link

documentation for this包括为您的主机系统添加条目的示例:

Note: Sometimes you need to connect to the Docker host, which means getting the IP address of the host. You can use the following shell commands to simplify this process:

$ alias hostip="ip route show 0.0.0.0/0 | grep -Eo 'via \S+' | awk '{ print \$2 }'"
$ docker run --add-host=docker:$(hostip) --rm -it debian

(还有 there's an open issue 如果您需要 IPv6 地址,这可能会有所帮助。)

编辑:在那之后,如果你想向前移动以便你正在与localhost通话在容器上,你需要自己处理那部分。有很多方法可以做到这一点( firewall rulenetcatproxy )并且它们独立于 Docker。没有与 Docker 的 -p 的内置等效项朝另一个方向移动的标志。

关于ip - 如何将 docker 容器端口转发到主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28651636/

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