[英]Permanently change the tomcat port from Dockerfile
我想在 k8s pod 中運行兩個容器。
由於 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
任何想法表示贊賞。
檢查 Dockerhub 中的tomcat:9.0.34
Dockerfile ,我們可以看到它正在暴露端口8080
。 當您將此圖像用作父圖像時會發生什么,即您從該圖像繼承了此EXPOSE
指令。
通過文檔搜索,Dockerfile 中似乎沒有“取消曝光”指令來撤消父圖像的EXPOSE 8080
指令。
這應該不會導致任何問題,但是如果您想消除它,您可以分叉 tomcat Dockerfile,刪除EXPOSE
指令並構建您自己的 tomcat 映像。
經過一番努力,我找到了更改 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/
部分不是必需的,除非您想最初部署一些war文件。 而且我也沒有添加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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.