我想在k8s吊舱内运行两个容器。
由于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:9.0.34
Dockerfile in Dockerhub,我们可以看到它正在暴露端口8080
。当您将此图像用作父图像时,会从该图像继承EXPOSE
指令。
通过the documentation搜索,似乎在Dockerfile中不存在“ unexpose”指令来撤消父映像的EXPOSE 8080
指令。
这应该不会引起任何问题,但是如果您想消除它,您可以分叉tomcat Dockerfile,删除EXPOSE
指令并构建自己的tomcat映像。