Dockernetworking:为什么我可以有两个打开同一个端口的容器

我了解与-p端口映射。 我知道我只能映射我的容器端口在主机networking上的一个端口:

 $ docker run -d -p 8080:80 nginx 

没有其他的容器映射其在8080端口,因为已经运行一个容器。 该端口8080将在docker-container-port 80上映射到docker0端口80等。

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

 $ docker -run -d -p 8888:80 

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

每个容器运行在一个单独的networking名称空间中。 这是一个孤立的networking环境,不与主机共享networking资源(地址,接口,路由等)。 当你在一个容器中启动一个服务时,就好像你已经在另一台机器上启动了它。

正如networking上运行80端口的networking服务器上有两台不同的机器一样,您的主机上可以有两个不同的容器,在80端口上运行的是networking服务器。

因为它们位于不同的networking名称空间中,所以不存在冲突。

有关networking命名空间的更多阅读: