我想在一个k8s吊舱中运行两个容器。
- tomcat导出器(运行在8080端口上(
- 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.34
Dockerfile,可以看到它正在暴露端口8080
。当您将此映像用作父映像时,会发生从该映像继承此EXPOSE
指令的情况。
在文档中搜索,Dockerfile中似乎不存在用于撤消父映像的EXPOSE 8080
指令的"unexpose"指令。
这应该不会引起任何问题,但如果您想消除它,可以派生tomcat Dockerfile,删除EXPOSE
指令并构建自己的tomcat映像。