我正在尝试使用 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 开关在外部公开端口。
我错过了什么?还是 EXPOSE 的用法?
我的最终需求是能够在 kubernetes 中部署它。
最佳答案
What have I missed?
您需要以某种方式发布端口:
通过在
docker run
命令中直接发布它,使用(注意小写 p)将EXPOSE
Dockerfile 指令重新映射到不同的主机端口:-p=[] : Publish a container᾿s port or a range of ports to the host
或者,如 docker documentation 中所述,使用(注意大写 P)隐式发布
EXPOSE
Dockerfile 指令中列出的端口:-P : Publish all exposed ports to the host interfaces
My end need is to be able to deploy this in kubernetes.
为了实现该目标,您将以类似方式使用 k8s list 中列出的端口。比如说,您在 docker 镜像中公开端口 8080(并使用 -p 或 -P 发布它),然后您将在容器规范中使用它(具体 list 取决于所选的 k8s 对象类型)并且很可能稍后在服务 list 中使用它,并且在每一层中,您都可以更改端口映射(类似于 docker run -p
将 host:docker 端口映射到不同的值,如果您需要的话)。因此,就 k8s 而言,如果您在 Dockerfile 中EXPOSE
端口并且它在本地容器中以及通过任何发布方式在主机上正常工作(docker run
with -p或 -P)它也将在 kubernetes 中运行(只要你在适当的 list 文件中列出它)。
关于docker - 暴露 Docker 端口的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50816546/