Dockerfile 命令EXPOSE
和docker run
参数--expose
告诉docker必须公开该端口。
使用-p
发布端口时,可以将外部主机端口映射到另一个内部容器端口,例如docker run -p 8080:80
,其中8080
是主机端口,而80
是容器端口。
我的问题是,EXPOSE
是指内部容器端口还是外部主机端口?
答案 0 :(得分:1)
Dockerfile中的EXPOSE
指令引用了容器端口。
答案 1 :(得分:1)
根据documentation,EXPOSE
指令通知Docker容器在运行时侦听指定的网络端口。因此它是指内部的容器。
EXPOSE
允许容器与同一网络中的其他容器之间进行通信。但是它不允许与主机或其他网络中的容器通信!为了允许这样做,您需要使用-p
选项发布该端口。
答案 2 :(得分:1)
EXPOSE
仅表示此当前容器的那些裸露端口可用于/暴露于同一网络中的所有容器。
答案 3 :(得分:0)
EXPOSE指令记录了容器内的应用程序正在侦听的端口。重要的词是“文档”。它不会改变docker运行容器的行为,不会发布端口,也不会影响容器之间连接的能力。
无论您是否公开端口,都需要单独发布端口以从容器网络外部访问它。而且,无论您是否公开端口,都可以在同一docker网络上的容器之间进行连接。
有多种工具可以使用此图像元数据自动发现您的应用程序。这包括-P
标志,用于将所有容器端口发布在随机编号的主机端口上。在查询docker引擎以确定要用于容器的默认端口时,您还将看到反向代理(例如traefik)使用此代理。