Dockerfile ENV未在sed中替换

l5tcr1uw  于 2023-04-29  发布在  Docker
关注(0)|答案(3)|浏览(130)

我已经设置了dockerfile,并使用sed更改配置文件。该图像是一个简单的rtmp restreamer。
dockerfile中的代码如下:

RUN sed -i 's/ytkey/${YOUTUBE_KEY}/g' /etc/nginx/nginx.conf &&\
sed -i 's/fbkey/${FACEBOOK_KEY}/g' /etc/nginx/nginx.conf

我一开始就设置了ENV

ENV YOUTUBE_KEY=default FACEBOOK_KEY=default

但在构建镜像后,它不会将 ytkeyfbkey 替换为 default,而是输入一个字符串 ${YOUTUBE_KEY}
我试过逃跑

RUN sed -i 's/ytkey/\${YOUTUBE_KEY}/g' /etc/nginx/nginx.conf &&\
sed -i 's/fbkey/\${FACEBOOK_KEY}/g' /etc/nginx/nginx.conf

但结果是一样的。这是sed(在''中有env)的问题还是其他问题?有没有一个替代sed的方法可以和dockerfile一起使用?或者我做事情的方式完全错误?

k2arahey

k2arahey1#

你可以像这样在环境变量周围使用双引号:

RUN sed -i 's/user/'"${YOUTUBE_KEY}"'/g' /etc/nginx/nginx.conf &&\
    sed -i 's/pid/'"${FACEBOOK_KEY}"'/g' /etc/nginx/nginx.conf
3hvapo4f

3hvapo4f2#

我知道这个问题是专门针对sed的,但您也可以考虑使用envsubst来实现这一点,特别是当您开始使用更多变量时。
它将stdin处理为stdout,因此在您的示例中,您需要使用临时文件策略,但我个人更喜欢这种方法:

envsubst < /etc/nginx/nginx.conf > /etc/nginx/nginx.conf.tmp
mv /etc/nginx/nginx.conf.tmp /etc/nginx/nginx.conf

对于更复杂的配置,模板通常会在不同的目录中,因此这是不必要的。

umuewwlo

umuewwlo3#

派对迟到了,但这在2023年对我很有效
在DOCKERFILE中输入这一行,其中WITH_ME是DOCKERFILE中的一个参数。例如,ARG WITH_ME=123
运行sed -i -e“s|更换_ME|联系我们|g”./path/file。文本
管子是关键

相关问题