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

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


You can accomplish this with IP aliasing 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 <someimage> <somecommand>docker run -p 10.0.0.11:5000:5000 -name container2 <someimage> <somecommand>

Now you can access each container on port 5000 using different IP addresses externally.


When creating a VM make sure that the following are selected under networking

Attached to:        Bridged NetworkManagerAdapter 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=xxxxxTYPE=BridgeBOOTPROTO=dhcpONBOOT=yesDELAY=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 showbridge name     bridge id               STP enabled     interfacesgsbr01          8000.080027595649       no              eth0virbr0          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

Check the result:

# brctl showbridge name     bridge id               STP enabled     interfacesgsbr01          8000.080027595649       no              eth0                                                        veth5806f27                                                        vethb3e33davirbr0          8000.5254004c1564       yes             virbr0-nicdocker -d -b=gsbr01