具有多个TCP端口的docker容器

时间:2017-09-20 15:57:37

标签: docker

我基于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

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

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