[英]Applying environment variables to JBoss Bootable Jar in OpenShift/Docker?
我有一個應用程序,我正在 Docker 中測試為 JBoss 可啟動 jar。dockerfile 將 jar 添加到容器中,然后運行它。 我想將數據庫憑據作為環境變量進行測試,然后作為 OpenShift 中的秘密。 我嘗試添加 jar 並在運行 CMD java -jar myapp.jar 之前對其進行操作,但路徑因構建而異,並且我嘗試捕獲路徑在構建圖像時不起作用。 我還考慮過在部署應用程序后注入變量。 它有效,但這是一個手動過程。
預先更改文件不起作用,因為在解壓縮文件時,我無法設置變量來存儲隨機路徑。
FROM registry.redhat.io/ubi8/openjdk-17-runtime
USER root
ENV envhostname=localhost envusername=myappuser envpassword=myapppassword envSID=myappsid
RUN microdnf install fontconfig &&\
microdnf install zip-3.0-23.el8.x86_64
USER 185
ADD myapp-0.0.1-SNAPSHOT-bootable.jar myapp-0.0.1-SNAPSHOT-bootable.jar
RUN unzip myapp-0.0.1-SNAPSHOT-bootable.jar
RUN unzip -n wildfly.zip
RUN export contentpath=$(find . -name "content" | grep -E 'content.+content')
RUN unzip $contentpath
RUN contentpath=${contentpath::-7}
RUN sed -i "s/envhostname/$envhostname/i" $contentpath/WEB-INF/classes/myapp/common/bc4j.xcfg
RUN sed -i "s/envusername/$envusername/i" $contentpath/WEB-INF/classes/myapp/common/bc4j.xcfg
RUN sed -i "s/envpassword/$envpassword/i" $contentpath/WEB-INF/classes/myapp/common/bc4j.xcfg
RUN sed -i "s/envSID/$envSID/i" $contentpath/WEB-INF/classes/myapp/common/bc4j.xcfg
RUN zip -f -Ar $contentpath/content $contentpath/WEB-INF/classes/myapp/common/bc4j.xcfg
RUN zip -f wildfly.zip $contentpath/content
RUN zip -f myapp-0.0.1-SNAPSHOT-bootable.jar wildfly.zip
CMD java -jar myapp-0.0.1-SNAPSHOT-bootable.jar
而且我不知道如何自動觸發 shell 腳本在 CMD 之后運行。
必須有一些更好的方法來處理這個問題。
錢幣。 我只需要更多地考慮這一點。 我通過修改我的 Dockerfile 解決了這個問題
FROM registry.redhat.io/ubi8/openjdk-17-runtime
USER root
ENV envhostname=localhost envusername=myappuser envpassword=mapppw envSID=myapp
RUN microdnf install fontconfig &&\
microdnf install zip-3.0-23.el8.x86_64
ADD myapp-0.0.1-SNAPSHOT-bootable.jar myapp-0.0.1-SNAPSHOT-bootable.jar
ADD prepcfg.sh prepcfg.sh
RUN chmod 777 myapp-0.0.1-SNAPSHOT-bootable.jar
USER 185
CMD ["./prepcfg.sh"]
並創建 prepcfg.sh
#!/bin/sh
unzip myapp-0.0.1-SNAPSHOT-bootable.jar
unzip -n wildfly.zip
export contentpath=$(find . -name "content" | grep -E 'content.+content')
contentpath=${contentpath::-7}
cd $contentpath
unzip content
sed -i "s/envhostname/$envhostname/i" WEB-INF/classes/myapp/common/bc4j.xcfg
sed -i "s/envusername/$envusername/i" WEB-INF/classes/myapp/common/bc4j.xcfg
sed -i "s/envpassword/$envpassword/i" WEB-INF/classes/myapp/common/bc4j.xcfg
sed -i "s/envSID/$envSID/i" WEB-INF/classes/myapp/common/bc4j.xcfg
zip -f -Ar content WEB-INF/classes/myapp/common/bc4j.xcfg
cd ~
zip wildfly.zip $contentpath/content
zip myapp-0.0.1-SNAPSHOT-bootable.jar wildfly.zip
java -jar myapp-0.0.1-SNAPSHOT-bootable.jar
因為當我可以在 Dockerfile 中調用的腳本末尾初始化我的 JBoss 服務器時,我不需要擔心運行兩個命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.