在 dockerfile 和 docker-compose 文件中使用“expose”的区别?

tot*_*to' 9 docker dockerfile docker-compose

我想知道EXPOSE在 Dockerfile 和 Docker-Compose 文件中使用有什么区别?

如果它在一个文件中而不是另一个文件中声明怎么办?或者如果它在两者中声明但具有不同的端口号怎么办?

Tar*_*ani 7

EXPOSE 中Dockerfile只是一个元数据信息。当有人使用docker run -P需要公开的端口时,它会告诉 docker 。

在 compose 或 docker run 中使用它们是指定这些端口的一种动态方式。因此,总是应该在容器内的端口 80 上运行的像nginx或这样的图像apacheEXPOSE在 Dockerfile 本身中使用。

虽然具有可以使用环境变量控制的动态端口的图像将使用暴露在docker runcompose file

docker run -e UI_PORT=5556 --expose 5556 -P ....
Run Code Online (Sandbox Code Playgroud)

  • 指定两者是多余的吗?或者镜像在 Dockerfile 上有一个 EXPOSE 命令是否足够,以便在同一个 docker-compose.yml 文件中声明的其他服务可以直接找到它? (3认同)