Friday, July 17, 2015

How to expose docker container's ip and port to outside docker host without port mapping?

http://stackoverflow.com/questions/25036895/how-to-expose-docker-containers-ip-and-port-to-outside-docker-host-without-port

You can accomplish this with virtual interface(s) on the host.
First, add a virtual interface on the host that has a different IP address than the primary interface. We'll call the primary interface eth0 with IP 10.0.0.10, and the virtual interface eth0:1 with IP address 10.0.0.11.
 ifconfig eth0:1 10.0.0.11 netmask 255.255.255.0 up 
Now run the containers and map port 5000 to the corresponding interface. For example:
docker run -p 10.0.0.10:5000:5000 -name container1  
docker run -p 10.0.0.11:5000:5000 -name container2  
Now you can access each container on port 5000 using different IP addresses externally.

- OR -

When creating a VM make sure that the following are selected under networking
    Attached to:        Bridged NetworkManager
    Adapter Type:       PCnet-Fast III (Am 79C973)
    Promiscious Mode    Allow All

RHEL 6.5 / Fedora 20
    Install docker, libvrt

    Make sure the following are done using root
        # chkconfig NetworkManager off
        # chkconfig network on  
        # service NetworkManager stop
        # service network start

    create file ifcfg-xxxxx in /etc/sysconfig/network-scripts
        DEVICE=xxxxx
        TYPE=Bridge
        BOOTPROTO=dhcp
        ONBOOT=yes
        DELAY=0

    and append to ifcfg-p2p1 / ifcfg-eth0 at the end of the file BRIDGE=xxxx

Restart the VM
    run 
    brctl show 
    to make sure the bridged connected has an adapter either p2p1 or eth0
    e.g.
        # brctl show
        bridge name     bridge id               STP enabled     interfaces
        gsbr01          8000.080027595649       no              eth0
        virbr0          8000.5254004c1564       yes             virbr0-nic

    now before starting docker we have to use our bridge and not docker0 to do that 

    run docker as
        docker -d -b=gsbr01

    $ echo 'DOCKER_OPTS="-b=gsbr01"' >> /etc/sysconfig/docker
    $ sudo service docker start


    # brctl show
    bridge name     bridge id               STP enabled     interfaces
    gsbr01          8000.080027595649       no              eth0
                                                            veth5806f27
                                                            vethb3e33da
    virbr0          8000.5254004c1564       yes             virbr0-nic

docker -d -b=gsbr01

1 comment:

radha said...
This comment has been removed by the author.