gpt4 book ai didi

linux - 如何将容器上的 localhost 端口转发到主机上的 localhost?

转载 作者:IT老高 更新时间:2023-10-28 12:38:22 32 4
gpt4 key购买 nike

我的主机上有一个守护程序在某个端口(即 8008)上运行,我的代码通常通过联系 localhost:8008 与守护程序交互。

我现在已经将我的代码容器化了,但还没有将守护进程容器化。如何将容器上的 localhost:8008 转发到运行容器的主机上的 localhost:8008(以及守护进程)。

以下是我的主机上的netstat -tlnp。我希望 容器 将 localhost:2009 转发到主机上的 localhost:2009

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name            
tcp 0 0 127.0.0.1:2009 0.0.0.0:* LISTEN 22547/ssh
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 ::1:2009 :::* LISTEN 22547/ssh

最佳答案

因此,您需要考虑的方式是 Docker 容器有自己的网络堆栈(除非您明确告诉它与 --net=host 共享主机的堆栈)。这意味着当与主机端口链接时,端口需要在 docker 容器 内部 和外部 ( documentation ) 上公开。容器上暴露的端口需要显式绑定(bind)到主机端口(在 docker run 命令中使用 -p xxxx:yyyy)或隐式绑定(bind)(使用 EXPOSE 在你的 Dockerfile 中并在命令行中使用 -P),就像它说的 here .如果您的 Dockerfile 不包含 EXPOSE 8008,或者您没有在 docker run 命令中指定 --expose 8008,则您的容器不能与外界交谈,即使您随后在 docker run 命令中使用 -p 8008:8008!

因此,要在与容器上的 tcp/8008 链接的主机上获取 tcp/8008,您需要在 Dockerfile 中使用 EXPOSE 8008(然后在容器中使用 docker build)或 --在 docker run 命令 中公开 8008。此外,您需要使用 -P 隐式或 -p 8008:8008 将暴露的容器端口显式链接到主机端口。执行此操作的示例 docker run 命令可能如下所示:

docker run -it --expose 8008 -p 8008:8008 myContainer

请记住,在 -p 8008:8008 命令行选项中,此操作的顺序是 -p HOST_PORT:CONTAINER_PORT。另外,不要忘记您将无法从 Internet 上的另一台计算机通过 SSH 连接到您的容器,除非您在主机上的 iptables 中也解锁了此端口。我总是最终忘记了这一点并浪费了半个小时才想起我忘记了 iptables -A INPUT ... 用于主机上的特定 tcp 端口。但是您应该能够在没有 iptables 规则的情况下从主机通过 SSH 连接到容器,因为它使用环回进行本地连接。祝你好运!

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

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