【发布时间】:2020-07-24 10:53:47
【问题描述】:
我想在一个 k8s pod 中运行两个容器。
- tomcat 导出器(运行在 8080 端口)
- tomcat 应用程序(也在 8080 端口上运行)
由于 pod 内的多个运行容器不能共享同一个端口,我期待构建一个具有不同端口的自定义 tomcat 映像(例如 9090(默认 tomcat 端口为:8080))
这就是我使用的 Dockerfile。
cat Dockerfile
FROM tomcat:9.0.34
RUN sed -i 's/8080/9090/' /usr/local/tomcat/conf/server.xml
EXPOSE 9090
构建该映像并运行容器后,我看到 9090 端口已分配,但我也看到 8080 仍然存在。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b66e1e9c3db8 chakilams3/tomcatchangedport:v1 "catalina.sh run" 3 seconds ago Up 2 seconds 8080/tcp, 0.0.0.0:9090->9090/tcp test
我想知道这个 8080/tcp 端口是从哪里来的,即使我在 server.xml 文件中将 8080 的所有引用都更改为 9090
感谢任何想法。
【问题讨论】:
-
可能来自你的基础镜像,tomcat:9.0.34。暴露的端口并不意味着容器实际上正在监听这些端口。您可以监听未暴露的端口,也可以不监听暴露的端口。 EXPOSE 主要是提供信息。
-
他们必须是同一个吊舱吗?如果你试图在 Docker 之外的同一主机上运行这两个进程,你会怎么做?
-
如果你愿意构建一个自定义的 tomcat 镜像,为什么不下载并在 tomcat 中作为 webapp 运行导出器呢?它将消除第二次集装箱和港口碰撞的需要,并有望产生想要的结果
-
@BurakSerdar - 是的 EXPOSE 只是信息,但我上面提到的问题是,即使在更改了 tomcat 的 server.xml 文件后,容器仍然显示 8080 处于活动状态(在实际情况下它应该只显示 9090)。问题是,在创建具有以上 2 个容器的 pod 时,由于端口绑定异常,pod 无法启动。
-
@DavidMaze 这里的问题是我在互联网上找到的 tomcat 导出器是一个战争文件 - 因此默认情况下在端口 8080 上运行 - 正如我所看到的,我们无法更改端口出口商。在不同的服务器上运行它们可能无法让导出器收集指标。我们所能做的就是看看如何让应用使用与导出器不同的端口。
标签: docker tomcat kubernetes dockerfile tomcat9