我正在开发一个 Dockerfile,在其中我想根据输入参数变量动态创建一个
sed
表达式,并将该表达式写入文件。
这是 Dockerfile 的一部分:
FROM ubuntu
ARG VERSION
RUN echo $VERSION > /usr/local/testfile
RUN echo '#!/bin/sh \n\
sed -i "s/\"version\"/\${VERSION}/g" file' > /usr/local/foo.sh
图像构建良好。 当我从该图像启动容器并检查文件时:
# cat /usr/local/testfile
0.0.1
# cat /usr/local/foo.sh
#!/bin/sh
sed -i "s/\"version\"/\${VERSION}/g" file
我注意到
$VERSION
命令中的 sed
未正确替换。我在这里缺少什么?我尝试了一些不同的方法(例如"$VERSION"
),但没有一个起作用。
我最终打破了命令。我通过使用字符串连接为
sed
命令创建了一个变量,然后我 echo
将其单独添加到文件中:
FROM ubuntu
ARG VERSION
ENV command="sed -i s/\"version\"/""$VERSION""/g"
RUN echo '#!/bin/sh' > /usr/local/foo.sh
RUN echo $command >> usr/local/foo.sh
# cat /usr/local/foo.sh
#!/bin/sh
sed -i s/"version"/0.0.1/g
检查是否满足所有这些要求:
ARG VERSION
ENV VERSION ${VERSION}
sed -i "s/$VERSION/0.0.1/g"