docker-compose.yml 上的“ports”与 Dockerfile 上的 EXPOSE 效果相同吗?

问题描述 投票:0回答:1

是否在 docker-compose.yml 上声明:

ports:
 - "3306:3306"

在 Dockerfile 上:

EXPOSE 3306

有同样的效果吗?

docker
1个回答
48
投票

ports

中的
docker-compose.yml
指令
和Dockerfile中的
EXPOSE
指令
具有不同的目的,并且不具有相同的效果。

Dockerfile
EXPOSE 3306

Container
+-----------------+
|                 |
|   Application   |
|      Port       | --> 3306 (EXPOSED, not accessible from host by default)
|                 |
+-----------------+

该指令是一种记录容器在运行时监听哪些端口的方法。它实际上并没有发布端口。
它作为文档的一种形式,由

docker run -P
命令用来在主机上分配随机的高编号端口并将其映射到公开的端口。

docker-compose.yml
ports: - "3306:3306"

Host System
+-----------------+      +-----------------+
|                 |      |                 |
|   Host Port     | <--> |   Container     |
|      3306       | <--> |      Port       | --> 3306 (Accessible from host)
|                 |      |                 |
+-----------------+      +-----------------+

该指令实际上将主机上的端口映射到容器中的端口。

"3306:3306"
表示将主机上的3306端口映射到容器中的3306端口。

在此设置中,Dockerfile 中的

EXPOSE
指令是可选的,因为
docker-compose.yml
已经映射了端口。
EXPOSE
的主要作用是提供文档以及与可能使用此信息的某些命令和编排器的兼容性。

© www.soinside.com 2019 - 2024. All rights reserved.