我已经设置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一起使用? 还是我完全以错误的方式做事?
答案 0 :(得分:1)
您可以在环境变量周围使用双引号,例如:
RUN sed -i 's/user/'"${YOUTUBE_KEY}"'/g' /etc/nginx/nginx.conf &&\
sed -i 's/pid/'"${FACEBOOK_KEY}"'/g' /etc/nginx/nginx.conf
答案 1 :(得分:0)
我意识到问题特别是关于sed的,但您也可以考虑使用envsubst
来执行此操作,尤其是当您开始使用更多变量时。
它将stdin处理为stdout,因此在您的示例中,您将需要使用临时文件策略,但就我个人而言,我更喜欢这种方法:
envsubst < /etc/nginx/nginx.conf > /etc/nginx/nginx.conf.tmp
mv /etc/nginx/nginx.conf.tmp /etc/nginx/nginx.conf
对于更复杂的配置,您的模板通常无论如何都位于不同的目录中,因此这不是必需的。