docker - 暴露 Docker 端口的问题

标签 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 开关在外部公开端口。

我错过了什么?还是 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/

相关文章:

python - 在 docker 容器上运行时无法连接到 Flask

java - 基于 User-Agent 的 Change Velocity 模板

javascript - 如何在 JavaScript 文件中正确编写 servlet url

java - 使用Intellij IDEA Ultimate进行静态网站开发

kubernetes - 如何获得Kubernetes集群范围指标

kubernetes - Gitlab 安装的 Helm : Error: context deadline exceeded

amazon-web-services - 无法访问我在 AWS Elastic beanstalk 上的 docker 中部署的 prometheus 和 grafana

git - 如何从正在运行的 docker 镜像中找到提交哈希

postgresql - 如何在构建时在 Docker 镜像之间建立网络?

kubernetes - 从minikube集群内部连接到本地数据库