【问题标题】:Docker: Change word in file at container startupDocker:在容器启动时更改文件中的单词
【发布时间】:2016-07-14 11:10:31
【问题描述】:

我正在为我们的 fluentd 创建一个 docker 镜像。 该图像包含一个名为 http_forward.conf 的文件 它包含:

<store>
   type http
   endpoint_url    ENDPOINTPLACEHOLDER
   http_method     post    # default: post
   serializer      json   # default: form
   rate_limit_msec 100    # default: 0 = no rate limiting
   raise_on_error  true  # default: true
   authentication  none  # default: none
   username        xxx  # default: ''
   password        xxx # default: '', secret: true
</store>

所以这就是我们的形象。但是我们希望将图像用于我们所有的环境。使用环境变量指定。

所以我们为我们的环境创建一个环境变量:

ISSUE_SERVICE_URL = http://xxx.dev.xxx.xx/api/fluentdIssue

这个 env 变量包含我们开发环境中的 dev、uat 上的 uat 等。 比我们想用我们的环境变量的值替换我们的 ENDPOINTPLACEHOLDER 。在 bash 中我们可以使用:

sed -i -- 's/ENDPOINTPLACEHOLDER/'"$ISSUE_SERVICE_URL"'/g' .../http_forward.conf

但是如果我们想在我们的 docker 容器中使用这个命令,我们应该如何/什么时候执行这个命令呢? (我们不想挂载这个文件)

【问题讨论】:

    标签: docker fluentd


    【解决方案1】:

    我们通过ansible 编码做到了这一点。

    将文件http_forward.conf作为模板,并根据环境部署更改,然后将文件夹(包括conf文件)挂载到docker容器。

    ISSUE_SERVICE_URL = http://xxx.{{ environment }}.xxx.xx/api/fluentdIssue
    

    剧本会是这样的,我不测试它。

    - template: src=http_forward.conf.j2 dest=/config/http_forward.conf mode=0644
    
    - docker:
          name: "fluentd"
          image: "xxx/fluentd"
          restart_policy: always
          volumes:
            - /config:/etc/fluent
    

    【讨论】:

    • 不错的解决方案,我会投赞成票,但我试图找到一种没有帮助工具的方法
    【解决方案2】:

    在您的 DockerFile 中,您应该在某处有一行以 CMD 开头。你应该在那里添加它。

    或者您可以更简洁:将 CMD 行设置为调用脚本。例如CMD ./startup.sh。文件 startup.sh 然后将包含您的 sed 命令,然后是启动 fluentd 的命令(我假设当前是 CMD)。

    【讨论】:

      猜你喜欢
      • 2018-08-17
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2019-02-13
      • 1970-01-01
      相关资源
      最近更新 更多