如何解释 docker 个容器的端口信息

how to interpret the port information for docker containers

我只是使用示例 docker 编写 yml 文件来创建一些容器,最后我得到了这个:

PS C:\Users\jj> docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                                  NAMES
70ef2ac09df0        couchdb:latest      "tini -- /docker-ent…"   9 seconds ago       Up 6 seconds        4369/tcp, 9100/tcp, 0.0.0.0:25984->5984/tcp, 0.0.0.0:25986->5986/tcp   jj_server-2_1
4ee92fc98788        couchdb:latest      "tini -- /docker-ent…"   9 seconds ago       Up 5 seconds        0.0.0.0:5984->5984/tcp, 4369/tcp, 9100/tcp, 0.0.0.0:5986->5986/tcp     jj_server-0_1
37c1a3a9be48        couchdb:latest      "tini -- /docker-ent…"   9 seconds ago       Up 5 seconds        4369/tcp, 9100/tcp, 0.0.0.0:15984->5984/tcp, 0.0.0.0:15986->5986/tcp   jj_server-1_1

正在尝试了解端口信息。

 4369/tcp, 9100/tcp, 0.0.0.0:15984->5984/tcp, 0.0.0.0:15986->5986/tcp   jj2_server-1_1

这是我在 docker-compose.yml 中使用的部分内容:

  server-0:
    environment:
      COUCHDB_PASSWORD: -pbkdf2-847043acc65626c8eb98da6d78682fbc493a1787,f7b1a3e4b624f4f0bbfe87e96841eda0,10
      COUCHDB_SECRET: 0123456789abcdef0123456789abcdef
      COUCHDB_USER: couchdb
      NODENAME: couchdb-0
    image: couchdb:latest
    networks:
      network:
        aliases:
          - couchdb-0
    ports:
      - "5984:5984"
      - "5986:5986"
    volumes:
      - "volume-0:/opt/couchdb/data"

完整的 yml 文件可以在这里找到:https://github.com/apache/couchdb-docker/issues/74 我唯一改变的是节点的名称。

在这个特定容器的情况下...是否意味着 HOST 机器的端口 5984 映射到容器的 5984?而在 server2 的情况下,HOST 机器的端口 25984 映射到容器的 5984?

有人可以解释其他一些端口吗? 4369 似乎在某些情况下用于集群……比如 RabbitMQ……但我不确定 couchDB 是否属于这种情况。 9100 也是如此……不确定为什么会创建它。抱歉,我是 docker 菜鸟。和一个 couchDB 新手。

谢谢。

是的,docker 的这个特性称为暴露模式,其中一些端口暴露给主机系统,因此您可以从 Docker 外部访问它们。在您的示例中,端口 4369 仅在内部使用且未公开,而其他 2 个端口公开且可以从外部访问。

还可以看出,所有 3 个容器都向某些主机端口公开了相同的内部端口,这意味着您可以通过端口 5984、15984 和 25984 从外部访问它们,同样适用于 5986、15986、25986。

0.0.0.0:25984->5984/tcp, 0.0.0.0:25986->5986/tcp jj_server-2_1 
0.0.0.0:5984->5984/tcp, 4369/tcp, 9100/tcp, 0.0.0.0:5986->5986/tcp     jj_server-0_1
0.0.0.0:15984->5984/tcp, 0.0.0.0:15986->5986/tcp jj_server-1_1

我也不是 couch db 用户,所以无法根据经验告诉你,但这里是官方文档的 link,其中包含端口及其用法的解释 CouchDB ports

In the case of this specific container... does it mean that the HOST machine's port 5984 is mapped to container's 5984? And in the case of server2, the HOST machines's port 25984 is mapped to the container's 5984?

是的,意思是:

  • 宿主机的5984端口将映射到容器jj_server-0_1的5984端口
  • 宿主机的25984端口将映射到容器jj_server-2_1的5984端口
  • 请注意, HOST 机器以及不同容器中的所有端口都必须是唯一的,而不同的容器可以公开相同的端口。意思是 jj_server-0_1jj_server-2_1 都可以暴露端口 5984

Can someone explain some of the other ports? 4369 seems to be used for clustering in some cases... like for RabbitMQ.. but i'm not sure if that's the case here for couchDB. Same goes for 9100... not sure why that gets created. Sorry, I'm a docker noob. and a couchDB noob.

一些其他端口,如 4369 或 9100 正在作为命令 EXPOSE 5984 4369 9100 的结果创建,您可以在它们的 Dockerfile 中找到。这只是一种方便且可选的方式,表明此 image/container 将侦听这些端口,如果需要,您可以将它们公开或 link 到您的主机。