【问题标题】:How can one prevent variable substitution/expension in AWS Fargate container definition command如何防止 AWS Fargate 容器定义命令中的变量替换/扩展
【发布时间】:2019-02-24 22:51:38
【问题描述】:

在本地使用docker run 运行 docker 时,我传递了一些参数,例如:

docker run -p 8080:80 -e "SERVICE_B_URL=somehost.co.uk" -d mynginx:latest /bin/sh -c "envsubst '\${SERVICE_B_URL}' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

这很好用。在我的/etc/nginx/conf.d/default.conf 中,字符串${SERVICE_B_URL} 被替换为somehost.co.uk

在 AWS fargate 上运行时,定义如下:

"environment": [
        {
          "name": "SERVICE_B_URL",
          "value": "someotherhost.co.uk"
        }
      ],
"command": [
        "/bin/sh",
        "-c",
        "envsubst '\\${SERVICE_B_URL}' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
      ],

\\ 用于转义 JSON 文件中的 \

尝试运行时,容器退出并出现错误,因为 NGINX 看到的是文字字符串 ${SERVICE_B_URL}。当我检查容器并看到 AWS 用于启动容器的命令时,它是:

Command ["/bin/sh","-c","envsubst '\\' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"]

请注意,Fargate 已尝试扩展字符串 '\\${SERVICE_B_URL}',然后将其作为命令提供给 docker run。我的意图是将其指定为文字字符串。

有没有办法逃避这个/停止扩展。我已经尝试过'\\\\${SERVICE_B_URL}' -> '\\' 之类的东西。


脚注,如果您想知道为什么我将 '\${SERVICE_B_URL}' 指定为 envsubst 而不仅仅是使用:

docker run -p 8080:80 -e "SERVICE_B_URL=somehost.co.uk" -d mynginx:latest /bin/sh -c "envsubst < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

原因是,被替换的文件包含其他 NGINX 配置,这些配置使用 $ 语法的变量。因此,为了防止这些被envsubst 替换,我明确命名了要替换的变量。使用 docker run 在本地运行,它就像一个魅力......

【问题讨论】:

    标签: amazon-ecs aws-fargate docker-run


    【解决方案1】:

    我最终通过使用CMD 使我们将传递给docker run 的命令成为Dockerfile 本身的一部分来简化这一点,例如:

    CMD ["/bin/sh","-c","envsubst '\\${SERVICE_B_URL}' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"]
    

    现在我们可以从 Fargate 的 JSON 文件中删除 command 配置。

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 2018-05-18
      相关资源
      最近更新 更多