有没有办法在前台运行 Postfix?

有没有办法在前台运行 Postfix?

有没有办法在前台运行 Postfix?

我想在 docker 中将 Postfix 作为 PID 1 运行。我不想使用任何 bash shell、supervisorD 或任何包装器来启动它。

我只是想知道是否有任何方法可以在前台启动它,以便我可以从“docker logs'container-name'”检查其日志

当我手动运行“postfix start”时,它会运行,然后在后台启动。有什么方法可以让它保持在前台吗?

谢谢

答案1

后缀需要一个 syslog 守护进程用于记录。以下是Dockerfile 运行 Postfixjessfraz/dockerfiles/postfix

运行rsyslog在容器中并启动与之并行的 Postfix

exec /usr/lib/postfix/master -c /etc/postfix -d 2>&1
tail -F /var/log/mail.log

答案2

从 Postfix 3.3 版开始,您还可以使用postfix start-fg,根据到文档

类似于启动,但保持 master(8) 守护进程在前台运行

它使事情变得简单多了!

答案3

从 Postfix 3.3 开始,docker 已原生支持。只需构建并运行此 Dockerfile 即可:

FROM alpine:3

RUN apk add --no-cache postfix postfix-pcre
RUN echo "maillog_file = /dev/stdout" >> /etc/postfix/main.cf

CMD ["/usr/sbin/postfix","start-fg"]

答案4

自 Postfix 3.4 起,此功能已得到正确支持,消除了 syslog 依赖性。

摘录自postfix/MAILLOG_README

配置日志记录到 stdout

当 Postfix 在容器中运行时,记录到 stdout 很有用,因为它消除了 syslogd 依赖。

  1. 如果尚不存在,请添加以下行master.cf(注意:行首不能有空格):

    postlog   unix-dgram n  -       n       -       1       postlogd
    

    注意:服务类型unix-dgram是在 Postfix 3.4 中引入的。在退出到旧版 Postfix 之前,请删除上述行。

  2. main.cf用 进行配置maillog_file = /dev/stdout

  3. 使用 启动 Postfix postfix start-fg

用于启动 Postfix 的 Docker 入口点利用postconf以下描述来修补配置:

#!/bin/bash -e

postconf maillog_file=/dev/stdout

# Rely on the Postfix 3.4+ default master.cf containing the line
# 'postlog   unix-dgram [...]'

exec /usr/sbin/postfix start-fg "$@"

相关内容