[英]How to expose docker container's ip and port to outside docker host without port mapping?
当我在一个docker主机上为同一个Web映像启动两个docker容器时。
5000
上侦听 5000
映射到49155
host的不同端口: 49156
49155
host外部访问这两个容器需要访问49155
主机ip和端口49155
或49156
是否有解决方案通过其IP和端口xxxx:5000
从端口docker主机访问docker容器,没有端口映射?
不同dock主机上的所有docker容器都可以直接相互访问。
您可以使用主机上的IP别名来完成此操作。
首先,在主机上添加一个虚拟接口,该接口的IP地址与主接口不同。 我们将主接口eth0
调用IP 10.0.0.10
,将虚拟接口eth0:1
调用IP地址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上的每个容器。
创建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-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
现在在启动docker0
之前我们必须使用我们的桥而不是docker0
来做到这一点,运行docker -d -b=gsbr01
作为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.