有没有办法在前台运行 Postfix?
我想在 docker 中将 Postfix 作为 PID 1 运行。我不想使用任何 bash shell、supervisorD 或任何包装器来启动它。
我只是想知道是否有任何方法可以在前台启动它,以便我可以从“docker logs'container-name'”检查其日志
当我手动运行“postfix start”时,它会运行,然后在后台启动。有什么方法可以让它保持在前台吗?
谢谢
答案1
后缀需要一个 syslog 守护进程用于记录。以下是Dockerfile
运行 Postfix看jessfraz/dockerfiles/postfix。
这运行rsyslog
在容器中并启动与之并行的 Postfix这:
exec /usr/lib/postfix/master -c /etc/postfix -d 2>&1
tail -F /var/log/mail.log
答案2
答案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 依赖性。
配置日志记录到 stdout
当 Postfix 在容器中运行时,记录到 stdout 很有用,因为它消除了 syslogd 依赖。
如果尚不存在,请添加以下行
master.cf
(注意:行首不能有空格):postlog unix-dgram n - n - 1 postlogd
注意:服务类型
unix-dgram
是在 Postfix 3.4 中引入的。在退出到旧版 Postfix 之前,请删除上述行。
main.cf
用 进行配置maillog_file = /dev/stdout
。使用 启动 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 "$@"