【问题标题】:Dockerfile ENV not replacing in sedDockerfile ENV 没有在 sed 中替换
【发布时间】:2020-08-11 10:39:56
【问题描述】:

我已经设置了 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 的问题(在 '' 中有环境)还是其他问题?是否有与 dockerfile 一起使用的 sed 替代方案? 或者我做事的方式完全错误?

【问题讨论】:

  • 单引号可能是造成这种情况的原因,是的;尝试使用双引号。您应该能够在本地系统上的非 Docker shell 中演示相同的内容。

标签: docker sed environment-variables dockerfile


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我知道这个问题专门针对 sed,但您也可以考虑使用 envsubst 来执行此操作,尤其是当您开始使用更多变量时。

    它将标准输入处理为标准输出,因此在您的示例中,您需要使用临时文件策略,但我个人更喜欢这种方法:

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

    对于更复杂的配置,您的模板通常会位于不同的目录中,因此没有必要这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      相关资源
      最近更新 更多