为什么端口需要用冒号分隔两次?

很多时候,我看到端口描述了两次,像Dockernetworking的Compose页面中的Docker Compose文件一样:

version: "3" services: web: build: . ports: - "8000:8000" db: image: postgres networks: default: # Use a custom driver driver: custom-driver-1 

我经常想知道为什么"8000:8000"而不是简单的"8000"

然后我看到这个例子,它有两个不同的端口:

 version: "3" services: web: build: . ports: - "8000:8000" db: image: postgres ports: - "8001:5432" 

有人可以解释这个端口表示的含义吗?

第一个端口是主机端口,第二个端口是远程端口(即:在容器中)。 该expression式将远程端口绑定到本地端口。

在这个例子中,您将容器的8080端口映射到主机的8080端口,但是使用不同的端口(例如:48080:8080)