我要读取文本文件中的行:
$SSH_PRIVATE_FILE="address"
我想以一种向已定义的SSH_PRIVATE_FILE
赋值的方式读取和评估该行。
以下是docker文件的内容
ARG SSH_PRIVATE_FILE
COPY build-params build-params
RUN while IFS='' read -r line || [ -n "$line" ]; do\
echo "Text read from file: $line";\
eval `$line`;\
done < "build-params"
RUN echo $SSH_PRIVATE_FILE
已更新
但是它返回错误:/ bin / sh:1:$ SSH_PRIVATE_FILE =“〜/ .ssh / id_rsa”:找不到
答案 0 :(得分:0)
Bourne类型的shell具有内置的机制来读取文本文件的内容并评估每一行,即.
指令。 (GNU bash在名称source
下具有相同的功能,但这不是POSIX Shell标准的一部分,并且Docker基本映像中的某些轻量级Shell不支持它。 。)在shell级别,您写的内容等同于
. ./build-params
但是,每个Dockerfile RUN行都运行一个单独的容器,该容器带有一个具有干净shell环境的单独shell,因此,事实证明这是设置环境变量的一种非常糟糕的方法。 Dockerfile ENV指令效果更好。
此外,由于您正在编写Dockerfile,因此您可以完全控制Dockerfile内的文件系统布局,并且您实际上并不需要在Docker容器内所在位置进行参数设置。 。如果是凭据之类的东西,则可以使用docker run -v
选项将其注入到容器中。如果需要这样的设置,我可以说我的Dockerfile
ENV SSH_PRIVATE_FILE=/ssh/id_rsa
然后实际启动容器为
docker run -v $HOME/.ssh:/ssh ...
并且完全不将其作为构建时选项。
答案 1 :(得分:-1)
一个疯狂的猜测,但是我尝试在每行的每个\
之前放置一个空格。