我正在尝试运行一个EC2服务器,它使用带有EC2的RDS数据库,在一个码头容器中。
我已经设置了安全组,因此允许EC2主机的角色访问RDS,如果我试图直接从主机访问它,一切都可以正常工作。
但是,当我在主机上运行一个简单的容器并试图访问RDS时,它会被阻塞,就好像安全组没有让它通过一样。经过一系列的尝试和错误之后,似乎容器请求似乎并不是来自EC2主机,所以防火墙拒绝。
我能够在短时间内通过在docker容器上设置-net=host来解决这个问题,但是这破坏了许多伟大的对接者网络功能,比如能够映射端口(也就是说,现在我需要确保容器的每个实例手动侦听不同的端口)。
有人想办法绕过这件事吗?如果您实际使用的是AWS资源,那么在AWS中运行容器似乎是一个很大的限制。
发布于 2015-10-02 17:41:42
弄清楚发生了什么,张贴在这里以防对其他人有帮助。
来自容器内部的请求访问的是RDS的公共ip,而不是私有的(这就是安全组的工作方式)。看起来,码头容器中的DNS使用的是8.8.8.8 google,这不会让AWS变点为私有ip的黑魔法。
例如:
DOCKER_OPTS="--dns 10.0.0.2 -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock -g /mnt/docker"
发布于 2017-01-26 01:46:28
是的,集装箱确实击中了RDS的公共IP。但是,您不需要调优低级别的Docker选项来允许您的容器与RDS对话。ECS集群和RDS实例必须位于同一个VPC中,然后可以通过安全组配置访问。最简单的方法是:
说明到哪里去的本教程有截图。
完全披露:本教程的特点是来自Bitnami的容器和我为Bitnami工作。然而,这里表达的思想是我自己的,而不是Bitnami的观点。
发布于 2019-07-10 20:19:37
RDS的入站规则应该设置为EC2实例的私有IP,而不是公共IPv4。
https://stackoverflow.com/questions/32893876
复制相似问题