How to access host port from docker container

前端 未结 14 1540
南旧
南旧 2020-11-22 03:41

I have a docker container running jenkins. As part of the build process, I need to access a web server that is run locally on the host machine. Is there a way the host web s

14条回答
  •  北恋
    北恋 (楼主)
    2020-11-22 03:54

    When running Docker natively on Linux, you can access host services using the IP address of the docker0 interface. From inside the container, this will be your default route.

    For example, on my system:

    $ ip addr show docker0
    7: docker0:  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 a 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 fairly easy to extract this IP address using a simple shell script:

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

    You may need to modify the iptables rules on your host to permit connections from Docker containers. Something like this will do the trick:

    # iptables -A INPUT -i docker0 -j ACCEPT
    

    This would permit access to any ports on the host from Docker containers. Note that:

    • iptables rules are ordered, and this rule may or may not do the right thing depending on what other rules come before it.

    • you will only be able to access host services that are either (a) listening on INADDR_ANY (aka 0.0.0.0) or that are explicitly listening on the docker0 interface.

提交回复
热议问题