我遇到了 docker 内部 DNS 问题。其中一个 docker 容器的 DNS 服务器速度太慢,导致大多数查询超时。Docker 安装在 KVM 虚拟机中,我有几个使用 docker-compose 生成的容器。默认 docker 配置。查询外部 DNS 工作正常,但在容器启动一段时间后(几分钟,有时是几小时),“ping google.com”有时会运行得非常快,有时会返回主机未找到错误(即使在之前成功运行之后)。或者需要花费几秒钟才能找到域的 IP。
我将虚拟机移到另一台服务器,更改了网卡配置,甚至更改了它的操作系统(Debian -> Ubuntu),但这并没有解决我的问题。
只有一个容器受到影响(可能是 DNS 查询数量最多的容器)。
我还应该做什么?如何调试该问题?
答案1
我能够重现这些症状。对我来说,解决办法有两点。
将 Docker Engine 从 19.x 升级到 20.10.3。升级到此版本后,我的
celery
容器能够连接到同一内部网络上的其他容器。但是,它无法连接到外部服务器,例如 google.com。向有问题的容器添加了一个开放端口,因此
docker-compose.yaml
我将以下内容添加到我的celery
容器(又名服务):
ports:
- "65123:65123"
将这个看似不需要的端口添加到我的celery
容器后,它现在可以连接到外部服务器。
思考
我知道这是一种黑客式的解决方法,但就我而言,它确实有效,而且打开一个没有任何人在监听的端口似乎比将整个网络置于外部更安全。我很重视任何关于这种解决方法是否安全的想法。