【发布时间】:2017-08-20 13:20:40
【问题描述】:
我想知道在 Dockerfile 和 Docker-Compose 文件中使用 EXPOSE 有什么区别?
如果它在一个文件中声明而不在另一个文件中声明怎么办?或者如果两者都声明了但端口号不同怎么办?
【问题讨论】:
标签: docker docker-compose dockerfile
我想知道在 Dockerfile 和 Docker-Compose 文件中使用 EXPOSE 有什么区别?
如果它在一个文件中声明而不在另一个文件中声明怎么办?或者如果两者都声明了但端口号不同怎么办?
【问题讨论】:
标签: docker docker-compose dockerfile
Dockerfile中的EXPOSE只是一个元数据信息。当有人使用docker run -P 时,它会告诉 docker 哪些端口需要暴露。
在 compose 或 docker run 中使用它们是指定这些端口的动态方式。因此,像 nginx 或 apache 这样的镜像总是应该在容器内的端口 80 上运行,它将在 Dockerfile 本身中使用 EXPOSE。
虽然具有可以使用环境变量控制的动态端口的图像将在 docker run 或 compose file 中使用暴露
docker run -e UI_PORT=5556 --expose 5556 -P ....
【讨论】:
EXPOSE 命令就足够了,以便在同一个 docker-compose.yml 文件中声明的其他服务可以直接找到它?