[英]Permanently change PATH in Dockerfile with dynamic value
我在 Dockerfile 中使用安全掃描軟件,我需要將其 bin 文件夾添加到路徑中。 它的路徑將包含版本部分,所以在我下載軟件之前我不知道路徑。 我目前的進展是這樣的:
1.下載軟件:
RUN curl https://cloud.appscan.com/api/SCX/StaticAnalyzer/SAClientUtil?os=linux --output SAClientUtil.zip
RUN unzip SAClientUtil.zip -d SAClientUtil
2. 所需文件夾位於:SAClientUtil/SAClientUtil.XYZ/bin/(xyz 可能因運行而異)。 使用 find 和 cd 組合到達那里並嘗試將其添加到 PATH:
RUN cd "$(dirname "$(find SAClientUtil -type f -name appscan.sh | head -1)")"; \
export PATH="$PATH:$PWD"; # doesn't work
看起來 ENV 命令沒有評估參數,所以
ENV PATH $PATH:"echo $(dirname "$(find SAClientUtil -type f -name appscan.sh | head -1)")"
也不起作用。 關於如何在 docker 映像構建期間將文件夾動態添加到 PATH 的任何想法?
一個簡單的解決方案是在映像中包含一個小的包裝腳本,然后使用它從 SAClientUtil 目錄運行命令。 例如,如果我在saclientwrapper.sh
中有以下內容:
#!/bin/sh
cmd=$1
shift
saclientpath=$(ls -d /SAClientUtil/SAClientUtil.*)
echo "got path: $saclientpath"
cd "$saclientpath"
exec "$saclientpath/bin/$cmd" "$@"
然后我可以這樣做:
RUN curl https://cloud.appscan.com/api/SCX/StaticAnalyzer/SAClientUtil?os=linux --output SAClientUtil.zip
RUN unzip SAClientUtil.zip -d SAClientUtil
COPY saclientwrapper.sh /saclientwrapper.sh
RUN sh /saclientwrapper.sh appscan.sh
這將在構建圖像時產生:
STEP 6: RUN sh /saclientwrapper.sh appscan.sh
got path: /SAClientUtil/SAClientUtil.8.0.1374
COMMAND SYNTAX
appscan <command> [options]
ADDITIONAL COMMAND HELP
appscan help <command>
.
.
.
如果您非常確定 zip 文件將僅包含一個具有該精確布局的目錄,您可以將其重命名為固定的名稱。
RUN curl https://cloud.appscan.com/api/SCX/StaticAnalyzer/SAClientUtil?os=linux --output SAClientUtil.zip \
&& unzip SAClientUtil.zip -d tmp \
&& mv tmp/SAClientUtil.* SAClientUtil \
&& rm -rf tmp SAClientUtil.zip
ENV PATH=/SAClientUtil/bin:${PATH}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.