我对Docker doc的EXPOSE vs -p感到困惑。以下是我的理解:EXPOSE仅用于容器间通信,不能从外部访问。
但是开发人员指南写道“EXPOSE指令实际上并没有发布端口。它可以作为构建映像的人和运行容器的人之间的一种文档,关于哪些端口要发布。 “
这是否意味着如果我将EXPOSE设置为8001而-p设置为8002,则-p标志将覆盖EXPOSE,容器将在8002上发布?我想我对“发布”一词感到困惑。
答案 0 :(得分:1)
您引用的开发人员文档是准确的,Dockerfile中的EXPOSE
条目是开发人员向运行图像的用户创建图像的文档。
如果您使用-P
,则docker将发布主机上的所有公开端口(请注意大写P,与小写选项不同)。
对于容器到容器的通信,您只需要位于同一个docker网络中。容器在应用程序正在直接侦听的端口上进行通信,不会暴露端口或发布到所需的主机。
在运行时使用-p
选项发布端口,并将端口从主机映射到容器中的端口,以使其在docker之外可用。公开端口不会影响使用-p
发布,只是文档和图像中的元数据。
答案 1 :(得分:0)
EXPOSE
表示您的容器可以通过此端口
-p
标志表示以上所有内容,但适合您的外部沟通
例如:
EXPOSE 8001
- 暴露在docker network内部
-p 8002:8001
- 将端口从8001内部扩展到8002外部