从Dockerfile永久更改tomcat端口



我想在一个k8s吊舱中运行两个容器。

  1. tomcat导出器(运行在8080端口上(
  2. tomcat应用程序(也在8080端口上运行(

由于一个pod中的多个运行容器不能共享同一个端口,我期待着用不同的端口(比如9090(默认tomcat端口为:8080((构建一个自定义的tomcat映像

这就是我使用的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内部端口的解决方案集装箱

我的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"]

在这里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

检查Dockerhub中的tomcat:9.0.34Dockerfile,可以看到它正在暴露端口8080。当您将此映像用作父映像时,会发生从该映像继承此EXPOSE指令的情况。

在文档中搜索,Dockerfile中似乎不存在用于撤消父映像的EXPOSE 8080指令的"unexpose"指令。

这应该不会引起任何问题,但如果您想消除它,可以派生tomcat Dockerfile,删除EXPOSE指令并构建自己的tomcat映像。

最新更新