簡體   English   中英

使用動態值永久更改 Dockerfile 中的 PATH

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

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