Docker 主机端口和容器端口

8

我正在运行一个数据库容器。我知道要查看端口映射,我可以使用命令 docker port <容器ID或名称>。因此,我尝试了这个命令:

$docker port ea72b2c4ba47
3306/tcp -> 127.0.0.1:3666

我能看到输出结果,但是哪一个表示的是主机使用的端口,哪一个表示容器的端口?


2
这意味着容器内的端口3306被映射到主机上的端口3666。更多信息请参见https://docs.docker.com/engine/reference/commandline/port/。 - mchawre
3
这句话的意思是,容器正在监听tcp端口3306,而容器的主机正在监听端口3666。任何发往主机3666端口的请求都会被转发到容器的3306端口。 - user1102967
1
@user1102967 +1 对于关键点“任何传入请求...”“都会被转发到”的赞同。 - Jacques
1个回答

5

3306/tcp -> 127.0.0.1:3666 意味着容器内的端口3306映射到主机上的端口3666。

更多信息请点击 此处

如果您认为docker port命令的输出很混乱,那么可以使用docker inspect命令来检索端口映射,正如官方文档所述

docker psdocker portdocker inspect是有用的命令,可用于获取关于端口映射的信息。

[user@jumphost ~]$ docker run -itd -p 3666:3306 alpine sh
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
050382585609: Pull complete 
Digest: sha256:6a92cd1fcdc8d8cdec60f33dda4db2cb1fcdcacf3410a8e05b3741f44a9b5998
Status: Downloaded newer image for alpine:latest
428c80bfca4e60e474f82fc5fe9c1c0963ff2a2f878a70799dc5da5cb232f27a
[user@jumphost ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
428c80bfca4e        alpine              "sh"                3 seconds ago       Up 3 seconds        0.0.0.0:3666->3306/tcp   fervent_poitras
[user@jumphost ~]$ docker port 428c80bfca4e
3306/tcp -> 0.0.0.0:3666
[user@jumphost ~]$ docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 428c80bfca4e
 3306/tcp -> 3666 
[user@jumphost ~]$

docker inspect container-id 命令还提供了端口的明确映射。

$ docker inspect 428c80bfca4e
     |
     |
"Ports": {
                "3306/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "3666"
                    }
                ]
            },
     |
     |

希望这能帮到您。

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