Docker - 后缀 main.cf 文件的更改在容器启动时被覆盖

Docker - Changes to postfix's main.cf file are overriden on container start

我正在尝试设置 docker 化的 Nagios。为此,我正在使用来自 jasonrivers 的已经工作的图像:Dockerfile

现在,我需要稍微调整图像中已经安装的后缀。我需要设置一个中继主机,以便从 nagios 发送的电子邮件转发到我的邮件服务器。这应该像在 /etc/postfix/main.cf 中设置 "relayhost" 属性 一样简单。 但是,无论我如何在 Dockerfile 中调整此值(我尝试同时使用 sed 和 COPY),当我在启动容器后检查 /etc/postfix/main.cf 文件时,relayhost 值被覆盖为空值.

起初我认为这与 docker 本身有关,我认为我在 Dockerfile 中调整此文件的步骤并没有最终影响最终图像。但是,当我用乱码覆盖 main.cf 时(比如将其内容设置为 "foo")然后在 运行 图像上,postfix 会抛出一些错误。

要将文字转化为代码,请考虑这个 Dockerfile:

FROM jasonrivers/nagios:latest
RUN echo "relayhost = www.abc.com" > /etc/postfix/main.cf

构建这个然后 运行 生成的图像将生成一个 /etc/postfix/main.cf 文件,其内容为

relayhost = 

我已经尝试使用 google 来弄清楚 postfix 是如何工作的以及为什么会这样,但我发现的唯一建议是 "master.cf" 中配置了一些东西,但事实并非如此(你可以自己下载图像并自己测试所有这些)。

JasonRivers/Docker-Nagios repo for the image has a feature in the postfix startup script to modify that setting overlay/etc/sv/postfix/run:

sed -i "s/relayhost =.*/relayhost = ${MAIL_RELAY_HOST}/" /etc/postfix/main.cf

MAIL_RELAY_HOST 环境变量设置为您的主机。

ENV MAIL_RELAY_HOST=www.abc.com