我在我的实例中设置了一个 docker swarm,但在连接到 docker 容器内的数据库时遇到问题。如果我跑步
nslookup xxxxxx.xxxxxxx.eu-west-2.rds.amazonaws.com
我得到
Server: 10.0.0.2
Address: 10.0.0.2#53
Non-authoritative answer:
Name: xxxxxx.xxxxxxx.eu-west-2.rds.amazonaws.com
Address: xxx.x.x.xx
但是当我 ssh 进入 docker 容器并重复相同的命令时,我得到:
Server: 127.0.0.11
Address: 127.0.0.11:53
** server can't find xxxxxx.xxxxxxx.eu-west-2.rds.amazonaws.com: SERVFAIL
RDS和EC2都是同一个VPC的一部分,RDS实例不是公共的 潜在的问题可能是什么?
问题出在docker容器的DNS配置上。容器在运行时无法获取 DNS 配置。
测试:
docker run -it --dns=10.0.0.2 ubuntu:20.04 bash
apt update
apt install dnsutils
nslookup xxxxxx.xxxxxxx.eu-west-2.rds.amazonaws.com
使其持久化(对于 Linux 实例):
nano /etc/docker/daemon.json
#copy followings:
{
"dns": [ "10.0.0.2" ],
}
sudo systemctl restart docker # restart docker service, or restart ec2 instance
对于 Win 实例:
create C:\ProgramData\docker\config\daemon.json
#copy followings:
{
"dns": [ "10.0.0.2" ],
}
Restart-Service -Name docker # restart docker service