在Dockerfile和docker-compose文件中使用"expose"的区别是什么?

17
我想知道在 Dockerfile 和 Docker-Compose 文件中使用 EXPOSE 的区别是什么?如果在其中一个文件中声明而在另一个文件中没有,或者在两个文件中都声明但端口号不同会怎样?
1个回答

12
Dockerfile 中使用的 EXPOSE 只是元数据信息。它告诉 Docker 在某人使用 docker run -P 时需要暴露哪些端口。
在 compose 或 docker run 中使用它们是一种动态指定这些端口的方式。因此,像 nginxapache 这样总是应该在容器内部运行在 80 端口上的镜像将在 Dockerfile 中使用 EXPOSE
而具有动态端口的镜像(可能可以使用环境变量进行控制)将在 docker runcompose 文件 中使用 expose。
docker run -e UI_PORT=5556 --expose 5556 -P ....

1
谢谢。我对Docker相对较新,有点难以理解如何解释您的答案。如果两个文件中暴露的端口不同,并且我从docker-compose构建和启动会发生什么? - toto'
1
这意味着两个端口都被暴露出来。 - Tarun Lalwani
3
指定两者都是多余的吗?或者在Dockerfile上有一个“EXPOSE”命令就足够了,这样同一docker-compose.yml文件中声明的其他服务可以直接找到它吗? - luisgepeto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接