将动态 sed 回显到 Dockerfile 中的文件

问题描述 投票:0回答:2

我正在开发一个 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"
),但没有一个起作用。

docker shell sed dockerfile echo
2个回答
0
投票

我最终打破了命令。我通过使用字符串连接为

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

0
投票

检查是否满足所有这些要求:

  • Docker run 命令或 docker-compose build 已定义构建参数
  • Dockerfile 已将构建参数加载到容器环境中,例如:
ARG VERSION
ENV VERSION ${VERSION}
  • sed 命令脚本使用双引号,例如
    sed -i "s/$VERSION/0.0.1/g"
  • 使用的参数名称区分大小写正确
© www.soinside.com 2019 - 2024. All rights reserved.