从 Dockerfile 永久更改 tomcat 端口

san*_*thu 4 tomcat docker kubernetes dockerfile tomcat9

我想在 k8s pod 内运行两个容器。

  1. tomcat 导出程序(在端口 8080 上运行)
  2. 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
Run Code Online (Sandbox Code Playgroud)

构建该映像并运行容器后,我看到 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
Run Code Online (Sandbox Code Playgroud)

我想知道这个 8080/tcp 端口从哪里来,即使我已经将 server.xml 文件中 8080 的所有引用更改为 9090

任何想法表示赞赏。

Ras*_*oda 6

经过一番努力,我找到了更改tomcat容器内部端口的解决方案

我的 Dockerfile 是

FROM tomcat:7.0.107
RUN sed -i 's/port="8080"/port="4287"/' ${CATALINA_HOME}/conf/server.xml
ADD ./tomcat-cas/war/ ${CATALINA_HOME}/webapps/
CMD ["catalina.sh", "run"]
Run Code Online (Sandbox Code Playgroud)

除非您想最初部署一些 war 文件,否则这里 ADD ./tomcat-cas/war/ ${CATALINA_HOME}/webapps/部分不是必需的。而且我也不添加EXPOSE 4287,因为如果我这样做,tomcat服务器不会绑定到端口4287,那么它总是绑定到8080默认端口。

只需构建镜像并运行
docker build -f Dockerfile -t test/tomcat-test:1.0 .
docker run -d -p 4287:4287 --name tomcat-test test/tomcat-test:1.0