如何解释Docker容器的端口信息

3

我刚刚使用了一个示例的Docker Compose 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,我所做的唯一更改是节点名称。
对于这个特定的容器,这是否意味着主机机器的5984端口映射到容器的5984端口?对于server2,主机机器的25984端口是否映射到容器的5984端口?
可以有人解释一下其他端口吗?4369似乎在某些情况下用于集群...例如对于RabbitMQ..但我不确定这是否适用于couchDB。9100也是如此...不确定为什么会创建它。抱歉,我是一个docker新手和couchDB新手。
谢谢。
2个回答

1
在这个特定的容器中,它的意思是主机的5984端口映射到容器的5984端口?对于server2,主机的25984端口映射到容器的5984端口?是的,就是这个意思:主机的5984端口将映射到容器jj_server-0_1的5984端口;主机的25984端口将映射到容器jj_server-2_1的5984端口。请注意,在主机和不同容器内部的所有端口都需要唯一,而不同容器可以公开相同的端口。这意味着jj_server-0_1和jj_server-2_1都可以公开端口5984。
一些其他端口,如4369或9100,是由命令EXPOSE 5984 4369 9100创建的,你可以在Dockerfile中找到。这只是一种方便且可选的方式,表示此镜像/容器将监听这些端口,如果需要,您可以将它们暴露或链接到主机上。

1
是的,Docker 的这个功能被称为暴露模式,其中一些端口会暴露给主机系统,以便您可以从 Docker 外部访问它们。就像您的示例中,端口 4369 仅在内部使用,未被暴露,而其他两个端口已经被暴露,可以从外部访问。
正如所见,所有 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的用户,所以无法从经验上告诉你,但这里是官方文档链接,其中解释了端口及其用途 CouchDB ports


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