如何从docker容器访问主机端口

我有一个运行jenkins的码头集装箱.作为构建过程的一部分,我需要访问在主机上本地运行的Web服务器.有没有办法将主机Web服务器(可以配置为在端口上运行)暴露给jenkins容器?

编辑:我在Linux机器上本地运行docker.

更新:

除了下面的@larsks答案,要从主机获取主机IP的IP地址,我还会执行以下操作:

ip addr show docker0 | grep -Po 'inet \K[\d.]+'
最佳答案
在Linux上本机运行Docker时,您可以使用docker0接口的IP地址访问主机服务.从容器内部,这将是您的默认路由.

例如,在我的系统上:

$ip addr show docker0
7: 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 show
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0  src 172.17.0.4 

使用简单的shell提取此IP地址相当容易
脚本:

#!/bin/sh

hostip=$(ip route show | awk '/default/ {print $3}')
echo $hostip

您可能需要修改主机上的iptables规则以允许
来自Docker容器的连接.像这样的东西会做的
特技:

# iptables -A INPUT -i docker0 -j ACCEPT

这将允许从Docker访问主机上的任何端口
容器.注意:

>订购了iptables规则,此规则可能会也可能不会
正确的事情取决于之前的其他规则.
>您将只能访问(a)的主机服务
收听INADDR_ANY(又名0.0.0.0)或明确说明
在docker0界面上收听.

转载注明原文:如何从docker容器访问主机端口 - 代码日志