我amazonlinux:2直接從 dockerhub 運行 docker 映像并使用以下命令安裝 corretto-17 JDK:
yum install -y git java-17-amazon-corretto-devel
注意:我沒有使用 custom Dockerfile,我無法控制它,也無法更改它。
然后當我嘗試運行我的.gradlew任務時,它失敗了,因為沒有JAVA_HOME設定。所以我這樣做:
echo "export JAVA_HOME='/usr/lib/jvm/java-17-amazon-corretto.x86_64'" >> /root/.bashrc
如果我手動將終端連接到容器,則.bashrc作業正常并且gradlew會運行。
但是當我通過以下方式從容器外部運行命令時:
docker exec kopibuild /bin/bash -c "cd the-project-code && ./gradlew build"
未.bashrc加載,因此JAVA_HOME未設定并gradlew失敗。
我的解決方法是將互動式標志添加-i到bash命令中,然后一切正常,但是日志中有關于“無法設定終端行程組(-1):設備的 ioctl 不合適”的警告。
docker exec kopibuild /bin/bash -c "cd the-project-code && BASH_ENV=/root/.bashrc ./gradlew build"
但它似乎沒有做任何事情。
為 Amazon Linux 設定環境變數以便它們存在于非互動式 shell 呼叫中的正確方法是什么?
uj5u.com熱心網友回復:
在谷歌搜索之后——我相信沒有標準的Linux方法可以為非互動式shell 設定環境變數。
但是有一種Docker方法可以回答這個問題。docker create在影像中的容器原件上amazonlinux:2,通過 指定環境變數-e JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto.x86_64。這將環境變數存盤在容器的 docker 元資料中,它將在所有執行背景關系中可用,包括直接呼叫的非互動式 shell docker exec(無需為每個exec命令顯式指定它)。
據我所知,這與ENVa 中的命令相同Dockerfile。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/445978.html
標籤:爪哇 linux 毕业典礼 红帽 amazon-linux-2
