今天我更换了 ISP,从此我的 docker 容器无法连接到外界。
/srv # ping google.com
ping: bad address 'google.com'
/srv # nslookup google.com
;; connection timed out; no servers could be reached
/srv # cat /etc/resolv.conf
nameserver 127.0.0.11
options ndots:0
我曾经通过 pihole 路由我所有的 DNS 查询,但我的新 ISP 不接受本地 IP(无论出于何种原因),而且我只有我的 ISP 路由器而不是我自己的,我还在我的路由器中设置了 Google 的 DNS
IPV4
8.8.8.8
8.8.4.4
IPV6
2001:4860:4860::8888
2001:4860:4860::8844
虽然是多余的,但我还在 Synology NAS 中设置了 IPV4 DNS 地址,因为那是 docker 运行的地方
Preferred DNS server: 8.8.8.8
Alternative DNS server: 8.8.4.4
_______________________________
/etc$ cat resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
domain arnhem.chello.nl
但是,这些都没有解决问题。 以我的 Caddy 容器为例,它尝试为我的域请求证书。它失败并返回以下内容:
dial tcp: lookup acme.zerossl.com on 127.0.0.11:53: read udp 127.0.0.1:51632->127.0.0.11:53: i/o timeout
我已经readatonofthreads有类似的问题,但似乎没有一个能解决我的问题
到目前为止我已经尝试过的事情
/etc/docker/daemon.json
并直接添加 Google 的域(当我打印容器的 resolv.conf
时,这似乎被忽略)resolve.conf
。这似乎在重新启动后立即丢失所以对我来说,这似乎是 Docker 内部 DNS 服务器出了问题,但目前我不确定了。由于最初唯一改变的是我的路由器,我的赌注仍在于此,但我必须检查每个设置一百次,并且似乎没有任何问题。可能是什么原因导致这个问题?
*编辑
daemon.json
/etc$ sudo cat docker/daemon.json
Password:
{
"dns": [
"8.8.8.8",
"8.8.4.4"
]
}
systemctl cat docker
(请注意,由于它在 Synology 上运行,因此以下命令有点不同)
/etc$ systemctl cat pkg-ContainerManager-dockerd.service
# /usr/local/lib/systemd/system/pkg-ContainerManager-dockerd.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
IgnoreOnIsolate=true
DefaultDependencies=no
[Service]
Type=notify
ExecStart=/var/packages/ContainerManager/target/usr/bin/dockerd --config-file /var/packages/ContainerManager/etc/dockerd
.json
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=always
RestartSec=2
TimeoutSec=0
StartLimitBurst=3
StartLimitInterval=60s
[X-Synology]
您已将配置文件从
/etc/docker/daemon.json
覆盖为 /var/packages/ContainerManager/etc/dockerd.json
。您需要在该文件中设置 DNS 设置,例如:
$ cat /var/packages/ContainerManager/etc/dockerd.json
{
"dns": [
"8.8.8.8",
"8.8.4.4"
]
}
然后使用
systemctl restart docker
重新启动 docker 引擎。