docker容器与多个TCP端口

我创build了一个基于github链接的docker容器 – https://github.com/wurstmeister/kafka-docker

并注意到显示3个端口和一个端口映射到主机。

我了解从容器暴露给主机系统的端口2181。

但是这3个端口是什么 – 22 / tcp,2888 / tcp,3888 / tcp ..如果这些端口没有暴露给主机系统显示。

a5779d08be33 wurstmeister/zookeeper "/bin/sh -c '/usr/..." 40 minutes ago Up 3 minutes 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp kafkadocker_zookeeper_1 

如果你运行下面的命令拉动图像后

 docker history --no-trunc wurstmeister/zookeeper | grep EXPOSE ... EXPOSE 2181/tcp 2888/tcp 3888/tcp ... EXPOSE map[22/tcp:{}] 

所以你看到用于构build这个镜像的Dockerfile已经提到端口2181,2888,3888,22应该被暴露。

docker ps将显示图像元数据提到的端口以及您映射的端口。

比方说,我运行下面的命令

 docker run --rm nginx 

docker ps将显示

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e39964ca9bb8 nginx "nginx -g 'daemon ..." 2 seconds ago Up 1 second 80/tcp suspicious_jones 

这告诉图像元数据指示端口80是容器内的程序可能正在监听的内容。 现在,如果我运行下面的相同的容器

 docker run -p 8080:8080 --rm nginx 

docker ps将显示

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 93df718d1d86 nginx "nginx -g 'daemon ..." 26 seconds ago Up 25 seconds 80/tcp, 0.0.0.0:8080->8080/tcp confident_bassi 

所以它是图像端口元数据和您实际映射的端口的组合。 当我们使用-P标志时,这个元数据派上用场

 docker run -P --rm nginx 

现在docker ps给我们

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bf70d3212ee9 nginx "nginx -g 'daemon ..." 1 second ago Up 1 second 0.0.0.0:32768->80/tcp hungry_keller 

正如您所看到的,映像元数据中提到的每个端口都会自动映射到主机上的一个可用端口