如何从与 Docker 主机位于同一网络的设备访问 Docker 容器?

如何从与 Docker 主机位于同一网络的设备访问 Docker 容器?

我在默认 docker 桥接网络中的 Linux 主机中运行了一个 docker 容器。容器可以访问互联网。(wget -qO- google.com有效)ifconfig显示 ip 172.17.0.2。我的笔记本电脑与我的服务器连接到同一个网络。它可以 ping 我的服务器,我的服务器可以 ping 我的笔记本电脑,我的 docker 容器可以 ping 我的笔记本电脑,但我的笔记本电脑无法 ping 我的 docker 容器。(我的服务器也可以 ping 我的容器。)使用 wireshark 我发现 docker 容器 ping 来自我的服务器的 ip。

我读到,docker 容器通过桥接适配器连接时使用伪装连接到互联网。(我不知道在哪里)我读到的化装舞会

“有一个小警告,那就是伪装功能几乎总是只在一个方向上起作用,也就是说,伪装的主机可以发出呼叫,但它们不能接受或接收来自远程主机的网络连接。”

我不确定这对于 docker 来说是否正确。

我能否以某种方式从我的笔记本电脑启动到我的 Docker 容器(在我当前的配置中)的连接?为什么或为什么不可以?

要做到这一点需要做什么?(我知道 -publish)

答案1

一种方法是设置 macvlan 接口。macvlan 接口模拟主机的 LAN,并为容器提供自己的 IP。您可以在此处阅读相关内容:https://docs.docker.com/network/network-tutorial-macvlan/

另一种方法是使用您了解的发布选项公开主机上的端口。例如,如果容器正在运行 Web 服务器,则可以公开端口 80。在此处了解详情:https://docs.docker.com/config/containers/container-networking/ 然后您将能够通过主机 IP 和您选择的端口来访问 docker。

总体而言,macvlan 方法更难,但如果您运行多个容器,则麻烦会少很多,因为它们各自都有自己的 IP。然而,第二种方法要简单得多,只需几秒钟即可完成设置。

答案2

默认情况下,Docker 容器连接到主机内部运行的桥接网络(将您的本地网络想象成 WAN/互联网,将 Docker 创建的网络想象成 LAN,将 Docker 主机想象成路由器)

您可以使用公开端口来docker run -p创建从主机 IP 地址到容器 IP 地址的 NAT 规则(例如,如果您在路由器上设置端口转发以从互联网访问私有网络内的设备)

您还可以在主机上设置路由,以便直接访问 Docker 桥接网络。为此,您需要确保主机已启用 IP 转发,您需要确保 Docker 主机防火墙允许传入到容器 IP 地址的连接,并且您需要在网络上配置路由(通过默认网关)以将 Docker 桥接网络 IP 地址路由到主机的 IP 地址

除了这些选项之外,你还可以参考官方文档来配置 Docker 网络https://docs.docker.com/network/#scope-of-this-topic

除了这些方法之外,您还可以通过 SSH 进入主机并创建到容器的 SSH 隧道。例如,如果 Docker 主机是 10.0.0.2,容器的 IP 地址是 172.17.0.1,并且您希望在端口 8080 上访问 nginx,则可以执行此操作,ssh -L 8080:172.17.0.1:8080 10.0.0.2这将重定向启动 SSH 连接的机器上的端口 8080 到容器上的 8080

相关内容