我已经设置了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
但在构建镜像后,它不会将 ytkey 或 fbkey 替换为 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一起使用?或者我做事情的方式完全错误?
3条答案
按热度按时间k2arahey1#
你可以像这样在环境变量周围使用双引号:
3hvapo4f2#
我知道这个问题是专门针对sed的,但您也可以考虑使用
envsubst
来实现这一点,特别是当您开始使用更多变量时。它将stdin处理为stdout,因此在您的示例中,您需要使用临时文件策略,但我个人更喜欢这种方法:
对于更复杂的配置,模板通常会在不同的目录中,因此这是不必要的。
umuewwlo3#
派对迟到了,但这在2023年对我很有效
在DOCKERFILE中输入这一行,其中WITH_ME是DOCKERFILE中的一个参数。例如,ARG WITH_ME=123
运行sed -i -e“s|更换_ME|联系我们|g”./path/file。文本
管子是关键