簡體   English   中英

將 tomcat 端口從 Dockerfile 永久更改

[英]Permanently change the tomcat port from Dockerfile

我想在 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

構建該映像並運行容器后,我看到 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM