-p标志是否覆盖EXPOSE?

时间:2017-12-21 01:19:39

标签: docker dockerfile

我对Docker doc的EXPOSE vs -p感到困惑。以下是我的理解:EXPOSE仅用于容器间通信,不能从外部访问。

但是开发人员指南写道“EXPOSE指令实际上并没有发布端口。它可以作为构建映像的人和运行容器的人之间的一种文档,关于哪些端口要发布。 “

这是否意味着如果我将EXPOSE设置为8001而-p设置为8002,则-p标志将覆盖EXPOSE,容器将在8002上发布?我想我对“发布”一词感到困惑。

2 个答案:

答案 0 :(得分:1)

您引用的开发人员文档是准确的,Dockerfile中的EXPOSE条目是开发人员向运行图像的用户创建图像的文档。

如果您使用-P,则docker将发布主机上的所有公开端口(请注意大写P,与小写选项不同)。

对于容器到容器的通信,您只需要位于同一个docker网络中。容器在应用程序正在直接侦听的端口上进行通信,不会暴露端口或发布到所需的主机。

在运行时使用-p选项发布端口,并将端口从主机映射到容器中的端口,以使其在docker之外可用。公开端口不会影响使用-p发布,只是文档和图像中的元数据。

答案 1 :(得分:0)

EXPOSE表示您的容器可以通过此端口

在docker network内访问

-p标志表示以上所有内容,但适合您的外部沟通

例如:

EXPOSE 8001 - 暴露在docker network内部

-p 8002:8001 - 将端口从8001内部扩展到8002外部