我有一个运行 jenkins 的 docker 容器。作为构建过程的一部分,我需要访问在主机上本地运行的 Web 服务器。有没有办法可以将主机 Web 服务器(可以配置为在端口上运行)暴露给 jenkins 容器?
我在 Linux 机器上本地运行 docker。
更新:
除了下面的@larsks 回答,要从主机获取主机 IP 的 IP 地址,我执行以下操作:
ip addr show docker0 | grep -Po 'inet \K[\d.]+'
原文由 Tri Nguyen 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Linux 上原生运行 Docker 时,可以使用
docker0
接口的 IP 地址访问主机服务。从容器内部,这将是您的默认路线。例如,在我的系统上:
在容器内:
使用一个简单的 shell 脚本很容易提取这个 IP 地址:
您可能需要修改主机上的
iptables
规则以允许来自 Docker 容器的连接。像这样的东西可以解决问题:这将允许从 Docker 容器访问主机上的任何端口。注意:
iptables 规则是有序的,这条规则可能会也可能不会做正确的事情,这取决于它之前的其他规则。
您将只能访问正在 (a) 监听
INADDR_ANY
(又名 0.0.0.0)或明确监听docker0
接口的主机服务。如果您在 MacOS 或 Windows 18.03+ 上使用 Docker,则可以连接到神奇的主机名
host.docker.internal
。最后,在 Linux 下,您可以通过设置
--net=host
在主机网络命名空间中运行容器;在这种情况下,您主机上的localhost
localhost
与容器内的 --- 相同,因此容器化服务将像非容器化服务一样运行,无需任何额外配置即可访问。