如何从Docker容器访问主机端口
我有一个运行詹金斯的码头集装箱。作为构建过程的一部分,我需要访问在主机上本地运行的Web服务器。是否可以将主机Web服务器(可以配置为在端口上运行)暴露给jenkins容器?
编辑:我正在Linux机器上本地运行docker。
更新:
除了下面的@larsks答案之外,要从主机获取主机IP的IP地址,我还要执行以下操作:
ip addr show docker0 | grep -Po 'inet \K[\d.]+'
回答:
在Linux上本地运行Docker时,您可以使用docker0
接口的IP地址访问主机服务。从容器内部,这将是您的默认路由。
例如,在我的系统上:
$ ip addr show docker07: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::f4d2:49ff:fedd:28a0/64 scope link
valid_lft forever preferred_lft forever
在容器内:
# ip route showdefault via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 src 172.17.0.4
使用简单的shell脚本提取此IP地址相当容易:
#!/bin/shhostip=$(ip route show | awk '/default/ {print $3}')
echo $hostip
您可能需要修改iptables
主机上的规则,以允许来自Docker容器的连接。这样的事情将达到目的:
# iptables -A INPUT -i docker0 -j ACCEPT
这将允许从Docker容器访问主机上的任何端口。注意:
iptables规则是有序的,根据其他规则的不同,该规则可能会也可能不会做正确的事情。
您将只能访问(a)监听
INADDR_ANY
(aka 0.0.0.0)或显式监听docker0
接口的主机服务。
以上是 如何从Docker容器访问主机端口 的全部内容, 来源链接: utcz.com/qa/423651.html