【问题标题】:run sed in dockerfile to replace text with build arg value在 dockerfile 中运行 sed 以用构建 arg 值替换文本
【发布时间】:2019-01-07 21:51:57
【问题描述】:

我正在尝试使用 sed 将 nginx.conf 中的文本“localhost”替换为我的 docker 主机的 IP 地址(仅供参考。在本地使用 docker 机器,它在 192.168.99.100 上运行 docker)。

我的 nginx Dockerfile 如下所示:

FROM nginx:alpine
ARG DOCKER_HOST
COPY ./nginx.conf /etc/nginx/nginx.conf
RUN sed -i 's/localhost/${DOCKER_HOST}/g' /etc/nginx/nginx.conf
EXPOSE 80

我的 nginx.conf 文件如下所示(注意:为简单起见,大部分已删除)

http {

   sendfile on;

   upstream epd {
      server localhost:8080;
   }

   # ...
}

我希望“localhost”被“192.168.99.100”取代,但它实际上被“${DOCKER_HOST}”取代。这会导致错误

在上游“${DOCKER_HOST}:8080”中找不到主机

我尝试了其他一些方法,但似乎无法正常工作。我可以确认 DOCKER_HOST 构建 arg 正在通过我的 docker compose 脚本进入 Dockerfile,因为我可以将其回显。

非常感谢您的任何回复...

【问题讨论】:

    标签: sed dockerfile


    【解决方案1】:

    s/localhost/${DOCKER_HOST}/g 周围的单引号' 替换为双引号"。变量不会插在单引号内。

    【讨论】:

    • 我已经尝试过了,在构建过程中得到了以下结果:步骤 4/6:运行 sed -i "s/localhost/${DOCKER_HOST}/g" /etc/nginx/nginx.conf ---> 在 20ac4ad09c9e sed 中运行:替换表达式中的错误选项错误:服务 'reverseproxy' 无法构建:命令 '/bin/sh -c sed -i "s/localhost/${DOCKER_HOST}/g" /etc /nginx/nginx.conf' 返回一个非零代码:1
    • 你能发布你用于 DOCKER_HOST 的变量吗?我想当替换完成时,有一个字符会破坏 sed 表达式(例如斜杠)。您可以通过使用另一个字符作为分隔符(如|; 而不是/)来修复。
    • 我在 .env 文件中定义了 DOCKER_HOST 参数,该文件由 docker-compose 使用。在 .env 文件中,我设置 DOCKER_HOST=192.168.99.100。在我的 Dockerfile 中,我有一个运行命令;运行 echo "|${DOCKER_HOST}|",正确输出 |192.168.99.100|到控制台。我还应该指出我正在使用来自 Windows 主机的 docker 机器 - 这会在虚拟框中的 moby linux VM 上配置 docker。
    猜你喜欢
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多