我正在为流利的人创建一个码头图片。 该图像包含一个名为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 on uat等。 比我们想要用我们的env变量的值替换我们的ENDPOINTPLACEHOLDER。在bash中我们可以使用:
sed -i -- 's/ENDPOINTPLACEHOLDER/'"$ISSUE_SERVICE_URL"'/g' .../http_forward.conf
但是如果我们想在docker容器中使用它,我们如何/何时必须执行此命令? (我们不想挂载此文件)
答案 0 :(得分: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
答案 1 :(得分:0)
在你的DockerFile中,你应该有一个以CMD开头的行。你应该把它添加到那里。
或者你可以做得更干净:设置CMD线来调用脚本。例如CMD ./startup.sh
。然后文件startup.sh将包含你的sed命令,然后是命令以启动你的流利(我假设它当前是CMD)。