繁体   English   中英

无法从 docker 容器内部连接到 RDS,我可以从主机连接到 RDS,也可以从本地 docker 容器连接到 RDS

[英]Cannot connect to RDS from inside a docker container, I can from the host, and I can from a local docker container

我有一个安装了 docker compose 的 ec2 实例,运行单个容器。 我在我的机器上本地复制了相同的设置。

使用nc -v **host** 5432结果:

  • 从我的机器 > 成功
  • 从在我的机器上运行的 docker 容器内部 > 成功
  • 从 ec2 实例内部 > 成功
  • 从在 ec2 上运行的 docker 容器内部 > 主机无法访问

如果有人能指出我正确的方向,我猜我在 ec2 的 docker 配置中缺少一些东西。

这是 docker_boot.service 文件

Description=docker boot
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/ubuntu/metabase
ExecStart=sudo /usr/bin/docker-compose -f /home/ubuntu/metabase/docker-compose.yml up -d --remove-orphans

[Install]
WantedBy=multi-user.target

这背后的原因是您的Docker 容器正在尝试使用公共 DNS 而不是私有的 DNS 解决您的 RDS DNS。

  1. 为了快速解决问题,我认为您可以nslookup您的RDS DNS并获取其 IPv4 地址之一。 然后,使用该单个 IPv4 作为您的host
nslookup <ID>.rds.amazonaws.com
  1. 要获得干净的解决方法,您需要将Docker 容器DNS 配置调整为VPC 内部 DNS IPv4 地址 使用--dns ,您可以快速调整它,如果您的应用程序也尝试访问其他服务,您可以添加更多 DNS 。
docker run --name app --dns=169.254.169.253 -p 80:5000 -d app

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM