簡體   English   中英

在 OpenShift/Docker 中將環境變量應用於 JBoss Bootable Jar?

[英]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.

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