多个TCP端口的Docker容器

3
我创建了一个基于github链接https://github.com/wurstmeister/kafka-docker的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个回答

3

在拉取镜像后,如果您运行以下命令:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接