How to access host port from docker container -


i have docker container running jenkins. part of build process, need access web server run locally on host machine. there way host web server (which can configured run on port) can exposed jenkins container?

edit: i'm running docker natively on linux machine.

update:

in addition @larsks answer below, ip address of host ip host machine, following:

ip addr show docker0 | grep -po 'inet \k[\d.]+' 

when running docker natively on linux, can access host services using ip address of docker0 interface. inside container, default route.

for example, on system:

$ 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 

and inside container:

# ip route show default via 172.17.0.1 dev eth0  172.17.0.0/16 dev eth0  src 172.17.0.4  

it's easy extract ip address using simple shell script:

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

you may need modify iptables rules on host permit connections docker containers. trick:

# iptables -a input -i docker0 -j accept 

this permit access ports on host docker containers. note that:

  • iptables rules ordered, , rule may or may not right thing depending on other rules come before it.

  • you able access host services either (a) listening on inaddr_any (aka 0.0.0.0) or explicitly listening on docker0 interface.


Comments