如何在没有端口映射的情况下将docker container的ip和port暴露给外部docker主机?

时间:2014-07-30 12:30:10

标签: networking port docker

当我在一个docker主机上为同一个Web图像启动两个docker容器时。

  • 在同一端口5000
  • 上侦听了两个docker容器 两个容器的
  • 端口5000已映射到docker host的不同端口:4915549156
  • 从Docker主机外部访问两个容器需要通过访问docker主机ip和端口4915549156

是否有解决方案通过其IP和端口x.x.x.x:5000从Docker主机外部访问docker容器,而不进行端口映射?

不同Dock主机上的所有docker容器都可以直接相互访问。

2 个答案:

答案 0 :(得分:62)

您可以在主机上使用IP别名来完成此操作。

首先,在主机上添加一个虚拟接口,该接口的IP地址与主接口不同。我们将使用IP eth0调用主接口10.0.0.10,使用IP地址eth0:1调用虚拟接口10.0.0.11

 ifconfig eth0:1 10.0.0.11 netmask 255.255.255.0 up 

现在运行容器并将端口5000映射到相应的接口。例如:

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>

现在,您可以使用外部的不同IP地址访问端口5000上的每个容器。

答案 1 :(得分:-6)

创建VM时,请确保在网络

下选择以下内容
Attached to:        Bridged NetworkManager
Adapter Type:       PCnet-Fast III (Am 79C973)
Promiscious Mode    Allow All

RHEL 6.5 / Fedora 20

Install docker, libvrt

确保使用root

完成以下操作
# chkconfig NetworkManager off
# chkconfig network on  
# service NetworkManager stop
# service network start

/ etc / sysconfig / network-scripts 中创建文件ifcfg-xxxxx

DEVICE=xxxxx
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
DELAY=0

并附加到文件末尾的ifcfg-p2p1 / ifcfg-eth0 BRIDGE=xxxx

重新启动VM

运行

brctl show 

确保已连接的桥接器具有p2p1eth0的适配器,例如

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

现在在启动docker之前,我们必须使用我们的网桥而不是docker0来执行此操作,将docker作为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