Docker端口映射是主机到容器还是容器到主机?

时间:2020-03-09 19:47:55

标签: linux docker

我经常使用Docker端口映射将主机端口映射到容器端口,即发送到主机端口的流量会转发到容器端口。

这可以看作是端口的主机到容器映射。

让我感到困惑的是,许多文章都在谈论将容器端口映射到主机端口,即反向映射。

此外,docker ps列出了主机到容器的端口映射,而docker port列出了容器到主机的端口映射:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
5526355f9c75        ubuntu:latest       "/bin/bash"              55 seconds ago      Up 54 seconds       127.0.0.1:4444->8080/tcp   angry_tharp

$ docker port angry_tharp
8080/tcp -> 127.0.0.1:4444

为什么所有这些与端口映射方向混淆?主机到容器的端口映射是从容器到主机的端口映射的形式不同还是相同?

2 个答案:

答案 0 :(得分:1)

主机到容器和容器到主机的端口映射完全相同。仅通过查看两个示例,您就可以看到这是正确的。端口是反向的,因此映射是完全相同的。

Docker端口显示与容器相关的端口映射,而docker ls / ps显示与主机相关的端口映射。为什么?不确定,但这不会更改映射。

根据他们的官方文档,我个人认为这些文档优先于任何非官方的文章:

Flag value  Description
-p 8080:80  Map TCP port 80 in the container to port 8080 on the Docker host.
-p 192.168.1.100:8080:80    Map TCP port 80 in the container to port 8080 on the Docker host for connections to host IP 192.168.1.100.
-p 8080:80/udp  Map UDP port 80 in the container to port 8080 on the Docker host.
-p 8080:80/tcp -p 8080:80/udp   Map TCP port 80 in the container to TCP port 8080 on the Docker host, and map UDP port 80 in the container to UDP port 8080 on the Docker host.

他们总是将映射称为主机到容器。

答案 1 :(得分:1)

泊坞窗端口映射将一个端口从容器内部公开到主机。因此,您所说的“主机到容器”也可以用“容器到主机”来表达:这取决于观点。

假设我们是一个网络数据包。到达主机后,我们将被转发到容器。那就是“主机到容器”。

但是现在让我们假装我们是容器中正在运行的服务。开始时,请绑定到容器端口,该端口已映射到主机的端口。因此,以一种“容器到主机”的方式。

您明白了:那是同一回事。