暴露Docker端口的问题
我正在尝试使用tomcat Docker映像打包war文件。 我试图在映像中公开tomcat端口,以便从外部访问它 这是我的docker文件暴露Docker端口的问题,docker,tomcat,kubernetes,dockerfile,Docker,Tomcat,Kubernetes,Dockerfile,我正在尝试使用tomcat Docker映像打包war文件。 我试图在映像中公开tomcat端口,以便从外部访问它 这是我的docker文件 FROM tomcat8:3.0.0 COPY target/hello-world-war-1.0.0.war /usr/local/tomcat/webapps EXPOSE 8080 但是,当我构建此映像时,运行它并尝试从我的主机浏览器(localhost:8080)访问它时,它没有到达端点,因此它无法按预期工作 我仍然必须使用-p开关将
FROM tomcat8:3.0.0
COPY target/hello-world-war-1.0.0.war /usr/local/tomcat/webapps
EXPOSE 8080
但是,当我构建此映像时,运行它并尝试从我的主机浏览器(localhost:8080)访问它时,它没有到达端点,因此它无法按预期工作
我仍然必须使用-p开关将端口暴露在外部
我错过了什么?或者使用EXPOSE是指其他内容
我的最终需要是能够在kubernetes中部署它。war中的EXPORT语句仅仅意味着war正在侦听映像中的端口8080,允许通过该端口访问应用程序 但是,这并不意味着它会打开这些端口。因此,您仍然需要使用-p开关打开docker的内部和/或外部端口,以允许容器和/或外部连接之间的通信 p指定的第一个端口是主机端口,第二个端口是容器端口。当您只指定一个端口时,这意味着该容器只能由运行在同一docker网络中的其他容器访问 我错过了什么 您需要以某种方式发布端口:
- 通过在
命令中直接发布它,使用(注意小写字母p)将docker run
Dockerfile指令重新映射到不同的主机端口:EXPOSE
- 或者,如中所述,使用(大写字母p)隐式发布
Dockerfile指令中列出的端口:EXPOSE
为此,您将以类似的方式使用k8s清单中列出的端口。比方说,您在docker映像中公开端口8080(并使用-p或-p发布),然后您将在容器规范中使用它(具体清单取决于所选的k8s对象类型),很可能稍后在服务清单中使用它,并且在每个层中您都可以更改端口映射(类似于
docker run-p
映射主机:如果需要,将docker端口映射到不同的值)。就k8s而言,如果您在Dockerfile中公开
端口,并且它在容器中以及通过任何发布方式在主机上正确工作(docker run
使用-p或-p)它也将在kubernetes中运行(只要您在适当的清单文件中列出).我认为您混淆了公开/发布端口。请检查您可以简单地运行docker run-p 8080:8080 image\u name
。我不确定您的端口号。第一个是主机端口,第二个是docker端口。@tgogos是的,我会研究这个问题。您答案的第一部分是错误的。即使您不使用公开
,端口仍然会我是开放的。你是对的,我的意思是它表明它正在监听那个端口。我已经编辑了我的答案。来源:
-p=[] : Publish a container᾿s port or a range of ports to the host
-P : Publish all exposed ports to the host interfaces