EXPOSE只是为了装饰吗?

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

TLDR:似乎我忘记公开 Jenkins 的端口,例如 8080 和 50000,但 Jenkins 仍然可以工作,并且我能够访问 WEB UI。怎么会呢?

所以过去几个月我一直在学习 Docker,在构建 Dockerfile 时,我总是确保公开适当的端口,如果我正在构建 Web 应用程序等,则为 80。

我正在构建一个 Dockerfile,其目的是在容器内运行 Jenkins 服务器,以及一些我需要确保管道正确运行的应用程序。

似乎我忘记公开 Jenkins 的端口,例如 8080 和 50000,但 Jenkins 仍然可以工作。

这让我想知道,EXPOSE 的实际用途是什么?我认为如果没有 EXPOSE,容器不会打开端口,从而使内部的应用程序不可用。

我知道应用程序和容器都需要接受特定端口上的流量,以及从本地主机到容器的端口映射,即 -port port:port 标志。

为什么我的 Dockerfile 可以在没有 EXPOSE 的情况下运行?如何才能访问容器内的 8080 端口而不暴露容器端口?

在服务器启动并正常运行之后,我更改了 Dockerfile 中的一些内容后,我基本上意识到了这一点。

我可能认为这可能是因为在 Jenkins 的情况下,端口是 8080,并且它可能是第二个默认端口 80?那么容器默认接受到该端口的流量?

docker jenkins
1个回答
0
投票

TLDR;它不是装饰性的,而是提供信息的 - 在大多数情况下意味着相同的。

您可以通过

docker run
命令的 cli 参数指定暴露的端口,而不是通过 dockerfile。
EXPOSE
只是提供信息,因此您可以“找出”映像期望您打开哪些端口,以便执行其应该执行的操作。

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