docker - 如何从 Docker 容器中获取 Docker 主机的IP地址

  显示原文与译文双语对照的内容

正如标题所示,我需要能够检索 Docker 主机和主机从主机到容器的IP地址。

时间: 原作者:


/sbin/ip route|awk '/default/{ print $3 }'



正如 @MichaelNeale 注意到的,在 Dockerfile ( 除非我们在构建期间需要这个 IP ) 中无法使用这里方法,因为在构建时将硬编码这里 IP 。

Docker bridge docker0 桥不存在,因此上面的答案将无法工作。 所有传出通信都通过你的父主机路由,因这里只要你尝试连接到 IP,就可以连接。 例如如果从父计算机运行这里操作,请执行以下操作:


ipconfig getifaddr en0



这应该会显示你的Mac在当前网络上的IP,你的Docker 容器应该能够连接到这个地址。 如果这个IP地址发生了变化,这是一个痛苦,但你可以在父机器上为你的Mac添加自定义环回 IP 。


sudo ifconfig lo0 alias 192.168.46.49



然后,你可以使用telnet在 Docker 容器中测试该连接。 在我的例子中,我想连接到远程的xdebug服务器:


telnet 192.168.46.49 9000



现在当通信进入 192.168.46.49 ( 所有离开你的容器的交通都会通过你的Mac )的Mac地址时,你的Mac会认为IP本身就是。 使用这里IP完成后,可以像这样删除环回别名:


sudo ifconfig lo0 -alias 192.168.46.49



要小心的是,如果 Docker 容器认为通信目的地本身就不会发送到父主机,那么它将不会发送信息。 如果有问题,请检查容器内的环回接口:


sudo ip addr show lo



对于我来说,这显示了 inet 127.0.0.1/8,这意味着我不能在 127.* 范围内使用任何 ip 。 这就是我在上面的例子中使用 192.168.*的原因。 确保你使用的IP与你自己网络上的内容不冲突。

...