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

时间:2019-01-28 22:45:28

标签: docker dockerfile port

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

使用-p发布端口时,可以将外部主机端口映射到另一个内部容器端口,例如docker run -p 8080:80,其中8080主机端口,而80容器端口

我的问题是,EXPOSE是指内部容器端口还是外部主机端口?

4 个答案:

答案 0 :(得分:1)

Dockerfile中的EXPOSE指令引用了容器端口。

答案 1 :(得分:1)

根据documentationEXPOSE指令通知Docker容器在运行时侦听指定的网络端口。因此它是指内部的容器

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

答案 2 :(得分:1)

EXPOSE仅表示此当前容器的那些裸露端口可用于/暴露于同一网络中的所有容器。

答案 3 :(得分:0)

EXPOSE指令记录了容器内的应用程序正在侦听的端口。重要的词是“文档”。它不会改变docker运行容器的行为,不会发布端口,也不会影响容器之间连接的能力。

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

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