首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从没有通过安全组的Docker容器中访问RDS?

从没有通过安全组的Docker容器中访问RDS?
EN

Stack Overflow用户
提问于 2015-10-01 17:55:16
回答 5查看 26.4K关注 0票数 29

我正在尝试运行一个EC2服务器,它使用带有EC2的RDS数据库,在一个码头容器中。

我已经设置了安全组,因此允许EC2主机的角色访问RDS,如果我试图直接从主机访问它,一切都可以正常工作。

但是,当我在主机上运行一个简单的容器并试图访问RDS时,它会被阻塞,就好像安全组没有让它通过一样。经过一系列的尝试和错误之后,似乎容器请求似乎并不是来自EC2主机,所以防火墙拒绝。

我能够在短时间内通过在docker容器上设置-net=host来解决这个问题,但是这破坏了许多伟大的对接者网络功能,比如能够映射端口(也就是说,现在我需要确保容器的每个实例手动侦听不同的端口)。

有人想办法绕过这件事吗?如果您实际使用的是AWS资源,那么在AWS中运行容器似乎是一个很大的限制。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-10-02 17:41:42

弄清楚发生了什么,张贴在这里以防对其他人有帮助。

来自容器内部的请求访问的是RDS的公共ip,而不是私有的(这就是安全组的工作方式)。看起来,码头容器中的DNS使用的是8.8.8.8 google,这不会让AWS变点为私有ip的黑魔法。

例如:

代码语言:javascript
运行
复制
DOCKER_OPTS="--dns 10.0.0.2 -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock -g /mnt/docker"
票数 15
EN

Stack Overflow用户

发布于 2017-01-26 01:46:28

是的,集装箱确实击中了RDS的公共IP。但是,您不需要调优低级别的Docker选项来允许您的容器与RDS对话。ECS集群和RDS实例必须位于同一个VPC中,然后可以通过安全组配置访问。最简单的方法是:

  1. 导航到RDS实例页
  2. 选择DB实例并钻取以查看详细信息
  3. 单击安全组id
  4. 导航到入站选项卡并选择Edit
  5. 并确保有一个带有源自定义的MySQL/Aurora类型的规则
  6. 输入自定义源时,只需开始键入ECS群集的名称,安全组名称将自动为您完成。

说明到哪里去的本教程有截图

完全披露:本教程的特点是来自Bitnami的容器和我为Bitnami工作。然而,这里表达的思想是我自己的,而不是Bitnami的观点。

票数 33
EN

Stack Overflow用户

发布于 2019-07-10 20:19:37

RDS的入站规则应该设置为EC2实例的私有IP,而不是公共IPv4。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32893876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档