当我在一个docker主机上为同一个Web图像启动两个docker容器时。
5000
5000
已映射到docker host的不同端口:49155
,49156
49155
或49156
是否有解决方案通过其IP和端口x.x.x.x:5000
从Docker主机外部访问docker容器,而不进行端口映射?
不同Dock主机上的所有docker容器都可以直接相互访问。
答案 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
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
运行
brctl show
确保已连接的桥接器具有p2p1
或eth0
的适配器,例如
# 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