升级后,Docker 无法连接外网

今天早上醒来时,看到报告说我的 Discourse 服务器“宕机”了。

我能够顺利 SSH 登录到服务器,发现需要安装一些安全更新,于是使用 apt full-upgrade 应用了这些更新,并用 reboot 重启了服务器。

服务器恢复运行花了一点时间,但启动后我检查了 Discourse Docker 容器,发现它正在运行,奇怪的是并没有出现问题。

我尝试使用 ./launcher app stop 停止并 ./launcher app start 重新启动,但没有帮助。

接着我尝试执行 ./launcher app rebuild,却遇到了以下错误:

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

我知道这些信息并不算多,但我确实束手无策。非常欢迎任何建议。

谢谢

1 个赞

这表明存在某种网络错误。也许是 Docker 无法访问外部网络?

有什么验证方法的想法吗?

尝试:

docker run --rm -i debian ping -c 1 github.com

您应该会得到类似以下输出:

○ → docker run --rm -i debian ping -c 1 github.com
PING github.com (140.82.113.3) 56(84) bytes of data.
64 bytes from lb-140-82-113-3-iad.github.com (140.82.113.3): icmp_seq=1 ttl=49 time=44.8 ms

--- github.com ping 统计 ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 44.797/44.797/44.797/0.000 ms
3 个赞

是的……返回的是
ping: github.com: 名称解析暂时失败

不确定是什么发生了变化。我不知道如何修复这个问题。

这在 Docker 外部也能工作吗?

1 个赞

我可以从 Docker 外部访问 GitHub。

ping github.com
PING github.com (192.30.255.113) 56(84) 字节的数据。
64 字节来自 lb-192-30-255-113-sea.github.com (192.30.255.113): icmp_seq=1 ttl=52 time=23.3 毫秒
64 字节来自 lb-192-30-255-113-sea.github.com (192.30.255.113): icmp_seq=2 ttl=52 time=23.3 毫秒

尝试:

  • 重启 Docker
  • 运行 docker run --rm -i debian cat /etc/resolv.conf 查看其中的内容
2 个赞

看起来是 Google

# 由 resolvconf(8) 生成的 glibc 解析器(3) 的动态 resolv.conf(5) 文件
#     请勿手动编辑此文件 -- 您的更改将被覆盖
# 127.0.0.53 是 systemd-resolved 存根解析器。
# 运行 "systemd-resolve --status" 以查看有关实际名称服务器的详细信息。

nameserver 8.8.8.8
nameserver 8.8.4.4

@supermathie 不确定这是否与此有关,但在 ./launcher logs app 中我看到:

[Tue 01 Dec 2020 07:07:13 PM UTC] 请参阅 https://curl.haxx.se/libcurl/c/libcurl-errors.html 了解错误代码:6
[Tue 01 Dec 2020 07:07:13 PM UTC] 无法初始化 API。
[Tue 01 Dec 2020 07:07:13 PM UTC] 域名未更改。
[Tue 01 Dec 2020 07:07:13 PM UTC] 跳过,下次续期时间为:Sat Dec 26 00:31:17 UTC 2020
[Tue 01 Dec 2020 07:07:13 PM UTC] 添加 '--force' 以强制续期。
[Tue 01 Dec 2020 07:07:13 PM UTC] 正在将密钥安装到:/shared/ssl/community.acescentral.com.key
[Tue 01 Dec 2020 07:07:13 PM UTC] 正在将完整链安装到:/shared/ssl/community.acescentral.com.cer
[Tue 01 Dec 2020 07:07:13 PM UTC] 运行重载命令:sv reload nginx
fail: nginx: runsv 未运行
[Tue 01 Dec 2020 07:07:13 PM UTC] 重载错误:
[Tue 01 Dec 2020 07:07:33 PM UTC] 请参阅 https://curl.haxx.se/libcurl/c/libcurl-errors.html 了解错误代码:6
[Tue 01 Dec 2020 07:07:34 PM UTC] 无法初始化 API。
[Tue 01 Dec 2020 07:07:34 PM UTC] 域名未更改。
[Tue 01 Dec 2020 07:07:34 PM UTC] 跳过,下次续期时间为:Sat Dec 26 00:31:20 UTC 2020
[Tue 01 Dec 2020 07:07:34 PM UTC] 添加 '--force' 以强制续期。
[Tue 01 Dec 2020 07:07:34 PM UTC] 正在将密钥安装到:/shared/ssl/community.acescentral.com_ecc.key
[Tue 01 Dec 2020 07:07:34 PM UTC] 正在将完整链安装到:/shared/ssl/community.acescentral.com_ecc.cer
[Tue 01 Dec 2020 07:07:34 PM UTC] 运行重载命令:sv reload nginx
fail: nginx: runsv 未运行
[Tue 01 Dec 2020 07:07:34 PM UTC] 重载错误:
已启动 runsvdir,PID 为 458
chgrp: 无效的组:'syslog'
ok: 运行:redis: (pid 473) 0 秒
ok: 运行:postgres: (pid 470) 0 秒
rsyslogd: imklog: 无法打开内核日志 (/proc/kmsg):操作不允许。
rsyslogd: 模块 imklog 激活失败 [v8.1901.0 请查看 https://www.rsyslog.com/e/2145 ]
supervisor pid: 471 unicorn pid: 497

您的 Docker 版本是多少,是如何安装的?另外,您运行的是哪个版本的 Ubuntu?

Client:
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.13.8
 Git commit:        afacb8b7f0
 Built:             Wed Oct 14 19:43:43 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.8
  Git commit:       afacb8b7f0
  Built:            Wed Oct 14 16:41:21 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.3-0ubuntu2.1
  GitCommit:
 runc:
  Version:          spec: 1.0.1-dev
  GitCommit:
 docker-init:
  Version:          0.18.0
  GitCommit:

老实说,我不记得了……它已经在这里很久了。我今天早上按照上述说明更新了 Ubuntu。

Ubuntu 20.04.1 LTS

重启 Docker 后,ping 命令是否生效?

不,错误依旧。

ping: github.com: 域名解析暂时失败

再补充一个随机的点……

我的 Discourse 服务器位于 community.mydomain.com
我的 WordPress 服务器位于 mydomain.com
昨天,我搭建了一个 Rocket.Chat 服务器,地址是 chat.mydomain.com

我已为 chat.mydomain.com 注册了 Let’s Encrypt 证书。
目前,WordPress 和 Rocket.Chat 服务器运行正常。

我不确定这是否与当前问题有关,但只是想确认一下,以免遗漏了什么。

我可能会尝试清除并重新安装 Docker;很难确切判断这里发生了什么以及 Docker 为何出错。

但在执行任何操作之前,请确保已备份您的数据(可以是 Discourse 备份,或者至少是 PostgreSQL 和上传文件)。如果可能,请对虚拟机进行镜像备份。

1 个赞

已完全卸载并重新安装 Docker。

问题仍然存在。

这令人沮丧。

您的服务器能否访问 Google DNS,即执行 ping 8.8.8.8

服务器端没有问题

ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=2.72 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.720/2.720/2.720/0.000 ms

Docker 端则没有成功

docker run --rm -i debian ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

说实话,我认为目前最好的做法是重新安装系统,然后将你的数据复制过去。

由于一些不明原因,你的系统已损坏,而重新安装的过程相当快捷。这很可能是你时间上最划算的选择。

4 个赞