docker EXPOSE 指的是容器端口还是主机端口?

Does docker EXPOSE refer to the container port or the host port?

Dockerfile 命令 EXPOSEdocker run 参数 --expose 告诉 docker 必须公开端口。

使用 -p 发布端口时,您可以将 外部主机端口 映射到不同的 内部容器端口 ,例如docker run -p 8080:80,其中 8080 主机端口 80 容器端口 .

我的问题是,EXPOSE是指内部集装箱港口还是外部主机港口?

Dockerfile中的EXPOSE指令指的是容器端口。

根据documentationEXPOSE指令通知Docker容器在运行时监听指定的网络端口。所以指的是里面的容器.

EXPOSE 允许容器与 同一网络 中的其他容器进行通信。但它不允许与主机或另一个网络中的容器通信!为了允许这样做,您需要使用 -p 选项 发布 端口。

EXPOSE 只是意味着当前容器的这些暴露端口 available/exposed 到同一网络中的所有容器。

EXPOSE 指令记录了容器内的应用程序预期侦听的端口。那里的重要词是 "documents"。它不会更改 docker 运行 您的容器的行为,不会发布端口,也不会影响容器之间的连接能力。

无论是否暴露端口,都需要单独发布端口才能从容器网络外访问。而且无论您是否公开端口,您都可以在同一 docker 网络上的容器之间进行连接。

有多种工具可以使用此图像元数据来自动发现您的应用程序。这包括 -P 标志,用于在随机高编号主机端口上发布所有容器端口。您还会看到反向代理(如 traefik)在查询 docker 引擎时使用它来确定用于您的容器的默认端口。