我试图让后缀在树莓派上的 docker 容器中工作。以下作品
ENTRYPOINT service rsyslog restart && service postfix restart && sleep 2s && tail /var/log/syslog -f
但是,如果我改为使用以下内容,这意味着在前台运行 postfix(根据文档,并从serverfault链接)
ENTRYPOINT postfix start-fg
然后它会启动,但是任何发送邮件的尝试都会导致fatal: unknown service: smtp/tcp
我的master.cf
包含
# service type private unpriv chroot wakeup maxproc command + args
smtp inet n - y - - smtpd
但是在阅读了有关 chroot 的许多其他问题后,我尝试将其关闭,但没有成功。
我还检查了两者中都存在 smtp/etc/services
并且/var/spool/postfix/etc/services
权限是开放的以供阅读。我确保这一点
RUN ln -snf /etc/services /var/spool/postfix/etc/services
-rw-r--r-- 1 root root 18774 Feb 3 23:28 /var/spool/postfix/etc/services
-rw-r--r-- 1 root root 18774 Feb 10 2019 /etc/services
#grep smtp /var/spool/postfix/etc/services
smtp 25/tcp mail
submissions 465/tcp ssmtp smtps urd # Submission over TLS [RFC8314]
#grep smtp /etc/services
smtp 25/tcp mail
submissions 465/tcp ssmtp smtps urd # Submission over TLS [RFC8314]
我完整的 dockerfile
FROM --platform=linux/arm/v7 debian:stable-slim
RUN apt-get update
RUN apt-get install postfix rsyslog -y
COPY etc /etc # I have main.cf, mcaster.cf, virtual, and mailname copying in
# Build the virtual.db database file
RUN postmap /etc/postfix/virtual
# This gets smtp working https://serverfault.com/questions/655116/postfix-fails-to-send-mail-with-fatal-unknown-service-smtp-tcp
RUN ln -snf /etc/services /var/spool/postfix/etc/services
EXPOSE 25
ENTRYPOINT service rsyslog restart && service postfix restart && sleep 2s && tail /var/log/syslog -f
#ENTRYPOINT postfix start-fg
我真的更喜欢将start-fg
两者用于在容器中拥有单个进程的最佳实践,并且它将使 syslog 日志管理更清晰。
如果我没有包含重要的内容或者我可以获取有用的日志,请发表评论。我在 linux 上处于中级水平,所以我会尽力获取日志和跟踪信息,但可能需要一些指导。
抱歉,我对此很陌生,但我会试一试:当你使用它时
postfix start-fg
,它将在 chroot 环境中启动后缀进程。Postfix 需要访问其中的一些文件/etc
(就像你提到的那样/etc/services
)。基于后缀文档:因此,用户有责任确保填充 chroot jail(获取所有文件和库)以使 postfix 按预期工作。这是 postfix 提供的用于设置 chroot 环境的脚本。您可以看到它从 /etc 以及一些库复制文件。