无法升级/发送电子邮件/获取主题……Docker问题吗?

您好,

最近几天我们突然开始遇到发送电子邮件的问题……然后我们尝试升级/更新但没有成功(更新页面卡住,并且所有组件——docker、discourse、插件——都卡在“正在检查新版本……”),然后我们尝试通过 root 更新所有内容,但重建失败并出现以下消息(除其他外):

fatal: unable to access 'https://github.com/discourse/discourse.git/': Could not resolve host: github.com`

我们的主机已确认服务器连接性、SSL、防火墙或其他任何方面都没有问题。

我怀疑是 docker 的问题。甚至查看了此主题:Docker 有时无法连接到 github.com - Installation - Discourse Meta 并尝试了:

# cd /var/discourse/
# ./launcher enter app
# wget -O - -v https://github.com/discourse/logster.git/ |wc

并得到了以下结果:

--2025-02-28 09:45:51--  https://github.com/discourse/logster.git
Resolving github.com (github.com)... failed: Temporary failure in name resolution.
wget: unable to resolve host address ‘github.com’
      0       0       0

有什么办法可以解决这个问题吗?

您是否在特殊地区(例如中国大陆)运营?

我会检查您主机上的 DNS,然后检查您 Docker 中的 DNS。

检查您主机上的 DNS:

resolvectl status|egrep Servers
nslookup github.com

检查您 Docker 中的 DNS:

docker exec -it app bash -c "cat /etc/resolv.conf"
docker exec -it app bash -c "wget -O - -v https://github.com/discourse/logster.git/ |wc"
1 个赞

好的,所以:

在主机 DNS 上:

#resolvectl status|egrep Servers
DNS Servers: 8.8.8.8
Fallback DNS Servers: 8.8.8.8
DNS Servers: 8.8.8.8 8.8.4.4
#nslookup github.com
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name:   github.com
Address: 140.82.112.3

在 Docker DNS 上:

#docker exec -it app bash -c "cat /etc/resolv.conf"
# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.

nameserver 8.8.8.8
nameserver 8.8.4.4

# Based on host file: '/etc/resolv.conf' (legacy)
# Overrides: [nameservers]
#docker exec -it app bash -c "wget -O - -v https://github.com/discourse/logster.git/ |wc"
--2025-02-28 12:20:17--  https://github.com/discourse/logster.git/
Resolving github.com (github.com)... failed: Temporary failure in name resolution.
wget: unable to resolve host address ‘github.com’
      0       0       0

附注:我们的主机在加拿大运行。

谢谢……我不知道这可能怎么发生,但我不是 Docker 专家。

你的主机操作系统是什么,你是如何安装 Discourse 的?你是用托管公司提供的包,还是标准安装的?(或者是开发版安装?)你是怎么安装 Docker 的?

但这一切曾经可以正常工作,然后突然不行了,所以可能和 Docker 有关。也许你可以更新你的 Docker 安装?

1 个赞

这是一个标准的安装,在过去的几个月里,它在 AlmaLinux 上一直运行得非常好(在此之前在 CentOS 上也运行得很好)。

如何更新 Docker 安装(不使用启动器进行常规重建说明或通过网站进行更新,因为这些方法似乎都无法正常工作)?

在继续操作之前,请先进行备份(如果可能)并下载本地副本。(也许可以尝试将 Discourse 站点迁移到另一台带有 rsync 的 VPS

请尝试运行这些命令,它们可能会提供一些线索:

docker --version
docker run hello-world
1 个赞

在 ChatGPT 的一些帮助下,我发现问题出在 Docker 的 Bridge 网络配置上,或者无论那是什么意思。

我已经尝试了几种修复方法,但到目前为止都没有成功。我还没有尝试这个:

这在生产环境中安全吗?(即使它会导致短暂的停机时间)

我恐怕不知道。我相信你有最近的安全备份。最不干扰的操作可能是重启。

1 个赞

我只是发帖更新一下情况。在 ChatGPT 的帮助下,问题解决了。

尝试了不同的解决方案后,这部分表明权限或安全策略有问题:

  1. 尝试使用 --privileged 标志运行容器

这会绕过一些可能影响网络的限制。

docker run --rm --privileged alpine ping -c 4 github.com

如果这能正常工作,则表明存在权限或安全策略问题。

之后,应用了下一个建议:

  1. 再次检查 iptables 规则

由于 Docker 依赖于 iptables,让我们确认它具有正确的转发规则。

运行:

sudo iptables -t nat -L -v -n | grep -i docker

如果没有出现与 Docker 相关的规则,请手动添加它们:

sudo iptables -P FORWARD ACCEPT

sudo iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT

sudo iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

然后重启 Docker:

sudo systemctl restart docker

然后再次测试。

……这完全解决了问题。:grin:

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.