2017-07-12 222 views
1

我有一個在Tomcat應用程序服務器內部運行的應用程序。它有許多可能會在不同環境之間改變的設置。例如,要使用的遠程API的數據庫憑證或主機/端口。在Docker容器中處理tomcat應用程序的配置

它們的默認值被烘焙到.war文件中。基本上,它們在web.xml中。通過參數docker run來改變它們的最佳方法是什麼?

到目前爲止,我正在考慮將$CATALINA_HOME/conf設置爲一個卷,並簡單地在Docker主機上設置上下文文件。也許有更好的方法?

我找不到使用環境變量來配置tomcat的方法。我必須更改應用程序本身來閱讀這些變量嗎?

簡而言之,有什麼方法可以在Docker中自定義tomcat應用程序,而無需在構建時將配置映射到映像本身?

如果很重要,我使用docker hub的官方tomcat鏡像。

回答

1

我通過在運行時通過swarm或docker run -e傳遞環境變量並在入口點腳本中使用envsubstr來解決此問題,以交換所需的內容。

Dockerfile:

ENTRYPOINT: ["my_script"] 

my_script:

envsubstr <server.dist.xml> server.xml 
catalina.sh start 

server.dist.xml:

<Resource name="jdbc/${DRIVER}" auth="Container" 
       type="javax.sql.DataSource" driverClassName="${DRIVER_NAME}" 
       url="${DRIVER_URL}" 
       username="${NAME}" password="${PASSWORD}" maxActive="20" maxIdle="10" 
       maxWait="-1"/> 

envsubstrgettext的一部分,因此請確保在您的圖像中可用。

相關問題