是否在 docker-compose.yml 上声明:
ports:
- "3306:3306"
在 Dockerfile 上:
EXPOSE 3306
有同样的效果吗?
中的
docker-compose.yml
指令和Dockerfile中的
EXPOSE
指令具有不同的目的,并且不具有相同的效果。
EXPOSE 3306
Container
+-----------------+
| |
| Application |
| Port | --> 3306 (EXPOSED, not accessible from host by default)
| |
+-----------------+
该指令是一种记录容器在运行时监听哪些端口的方法。它实际上并没有发布端口。
它作为文档的一种形式,由
docker run -P
命令用来在主机上分配随机的高编号端口并将其映射到公开的端口。
ports: - "3306:3306"
Host System
+-----------------+ +-----------------+
| | | |
| Host Port | <--> | Container |
| 3306 | <--> | Port | --> 3306 (Accessible from host)
| | | |
+-----------------+ +-----------------+
该指令实际上将主机上的端口映射到容器中的端口。
"3306:3306"
表示将主机上的3306端口映射到容器中的3306端口。
在此设置中,Dockerfile 中的
EXPOSE
指令是可选的,因为 docker-compose.yml
已经映射了端口。 EXPOSE
的主要作用是提供文档以及与可能使用此信息的某些命令和编排器的兼容性。