继续讨论 Let’s Encrypt 根证书变更后的自托管邮件接收器更新 :
在将 mail-receiver 更新到最新版本后,./launcher logs mail-receiver 输出以下错误:
postfix/postfix-script: warning: symlink leaves directory: /etc/postfix/./makedefs.out
<20>Oct 1 06:10:33 postfix/postfix-script[86]: warning: symlink leaves directory: /etc/postfix/./makedefs.outStarting Postfix
且未显示任何其他事件(如收到的邮件、被拒绝的邮件等)。
我在自定义 Postfix 设置方面遇到了一些问题(这些设置在最近的更新前运行完美),需要进行调试,但如果没有日志则难以进行。
RGJ
(Richard - Communiteq)
2021 年10 月 1 日 07:10
3
我确实看到了相同的错误 警告,但 Postfix 在之后仍正常运行并接收邮件。
有时日志似乎不会立即刷新,因此您可能需要等待一段时间才能看到输出。但这与警告无关。
那么它实际上会为您崩溃吗?
RGJ:
Postfix 随后正常运行并接收邮件。
同样,使用默认设置。但我不得不暂时禁用额外的 Postfix 规则:
POSTCONF_smtpd_client_restrictions: 'regexp:/etc/postfix/shared/client_access_regex'
该规则在升级前运行完美(使用正则表达式规则拒绝垃圾邮件发送者)。真正的问题是,启用此设置后,Postfix 开始拒绝所有传入邮件,但我无法从日志中看到原因!
也许需要等一会儿,但已经过了几个小时,日志中仍然没有任何内容(既没有显示已接受的邮件,也没有显示被拒绝的邮件,而且确实存在传入流量)。
您说得对,输出中确实还有其他日志条目,但输出本身是乱码:
./launcher logs mail-receiver 的输出以 <HEAD> 开头:
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
Operating environment:
HOSTNAME=discourse-mail-receiver
LANGUAGE=en_US.UTF-8
MAIL_DOMAIN=...
...
...
Setting smtpd_tls_security_level to 'may'
postfix/postfix-script: warning: symlink leaves directory: /etc/postfix/./makedefs.out
随后是一行日志条目,并以 <HEAD> 结尾,该标签又重复了六次:
<HEAD>
Single line of log entries without line breaks..............................................................................................................................................................................................
<HEAD>
<HEAD>
<HEAD>
<HEAD>
<HEAD>
<HEAD>
我之前只查看了输出的末尾,那里似乎总是只有 <HEAD>,没有任何其他条目。
./launcher logs mail-receiver 对日志的渲染肯定存在问题。
我想我已经解决了这个问题,Dockerfile 中缺少一行 maillog_file。临时修复方案:在 mail-receiver.yml 中添加了
POSTCONF_maillog_file: '/dev/stdout'
并重新构建,但这应该在 Docker 镜像中进行修复
RUN > /etc/postfix/main.cf \
+ && postconf -e maillog_file=/dev/stdout \
&& postconf -e smtputf8_enable=no \
...
david
(David Taylor)
2021 年10 月 11 日 16:06
7
所以添加这行之后,错误消失了,日志也正常工作了?如果是的话,你介意提交一个 PR 来修改这个吗?
david
(David Taylor)
2021 年12 月 8 日 00:24
10
感谢 @md-misko - 我已合并 PR 并更新了 Dockerhub 上的 discourse/mail-reciever:release 标签。
我确定您已经知晓,但万一其他人看到此主题,您可以通过运行以下命令来更新您的邮件接收器版本:
docker pull discourse/mail-receiver:release
cd /var/discourse
./launcher rebuild mail-receiver
3 个赞
pfaffman
(Jay Pfaffman)
2021 年12 月 8 日 15:25
11
您有什么方法可以测试当前运行的映像是否是最新版本吗?
david
(David Taylor)
2021 年12 月 8 日 16:07
12
有点绕……但我想这应该可以:
# 首先,确保你本地有最新的基础镜像
docker pull discourse/mail-receiver:release
# 获取基础镜像的顶层
BASE_IMAGE_HASH=$(docker history discourse/mail-receiver:release -q | head -n 1)
# 获取**正在运行**版本的镜像层
RUNNING_IMAGE_HASH=$(docker container inspect mail-receiver -f "{{.Image}}")
RUNNING_IMAGE_LAYERS=$(docker history $RUNNING_IMAGE_HASH -q)
# 检查运行镜像的层是否包含当前的基础镜像:
[[ "$RUNNING_IMAGE_LAYERS" == *"$BASE_IMAGE_HASH"* ]] && echo "Up to date"
如果你的镜像是最新的,它将打印“Up to date”。否则,最后一行将不打印任何内容,并以非零状态退出。
2 个赞
pfaffman
(Jay Pfaffman)
2021 年12 月 8 日 16:14
13
太棒了。这看起来是一个通用的解决方案,我以前只找到过一次性的解决方案。我需要花点时间才能弄清楚。我不知道要查找 RUNNING_IMAGE_LAYERS。
我在一个已升级的实例和一个未升级的实例上进行了测试,它似乎表现符合预期。
非常感谢!
3 个赞
system
(system)
关闭
2022 年1 月 7 日 16:14
14
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.