我基于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
答案 0 :(得分:0)
如果您在命令
下运行,请拉动图像docker history --no-trunc wurstmeister/zookeeper | grep EXPOSE
... EXPOSE 2181/tcp 2888/tcp 3888/tcp
... EXPOSE map[22/tcp:{}]
所以你看到用于构建此图像的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
如您所见,图像元数据中提到的每个端口都会自动映射到主机上的可用端口