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

在docker-compose.yml上声明:

ports: - "3306:3306" 

和Dockerfile上:

 EXPOSE 3306 

有相同的效果?

否: EXPOSEEXPORT不存在)仅打开容器中的端口,使其可以被其他容器访问。

"3306:3306"将在主机上发布该端口,使得主机可以访问相同的端口。

请参阅Dockerfile EXPOSE

EXPOSE指令通知Docker在运行时侦听指定的networking端口。
EXPOSE不会使容器的端口可以被主机访问。 为此,您必须使用-p标志发布一系列端口。

这是docker-compose.yml端口部分的作用。 它将容器端口映射到主机。