Docker网络:为什么我有2个容器打开了同一个端口

时间:2017-12-12 20:30:00

标签: docker networking

我理解使用-p进行端口映射。我知道我只能在主机网络的一个端口上映射我的容器端口:

$ docker run -d -p 8080:80 nginx

8080上没有其他容器映射其端口,因为已经在运行容器。此端口8080将映射到docker0端口80上,依此类推在docker-container-port 80上。

但我真的不明白为什么我可以拥有另一个nginx:

$ docker -run -d -p 8888:80

我必须将我的端口映射到主机的另一个端口(8888),但为什么我的docker0网络可以打开端口80 2次?它后面有两个容器,端口80.我知道它有效,但我只是不明白为什么。

1 个答案:

答案 0 :(得分:1)

每个容器都在单独的网络命名空间中运行。这是一个隔离的网络环境,不与主机共享网络资源(地址,接口,路由等)。当您在容器中启动服务时,就好像您已在另一台计算机上启动它一样。

就像您的网络上有两台不同的计算机,网络服务器在端口80上运行一样,您可以在主机上安装两个不同的容器,并在端口80上运行Web服务器。

因为它们位于不同的网络名称空间中,所以没有冲突。

有关网络命名空间的更多信息:

相关问题