Ale*_*ing 17 amazon-ec2 amazon-web-services docker
我正在尝试运行一个在Docker容器中使用带有EC2的RDS数据库的Web服务器.
我已经设置了安全组,因此允许EC2主机的角色访问RDS,如果我尝试直接从主机访问它,一切正常.
但是,当我在主机上运行一个简单的容器并尝试访问RDS时,它会被阻止,就好像安全组没有通过它一样.经过一系列的反复试验后,似乎确实没有出现容器请求来自EC2主机,因此防火墙说没有.
通过在docker容器上设置--net = host,我能够在短期内解决这个问题,但这会破坏很多很棒的docker网络功能,比如能够映射端口(即,现在我需要确保每个容器的实例用手监听不同的端口).
有没有人找到解决这个问题的方法?如果您实际使用任何AWS资源,那么在AWS中运行容器似乎是一个非常大的限制.
Nea*_*eal 22
是的,容器确实达到了RDS的公共IP.但是您不需要调整低级Docker选项以允许容器与RDS通信.在ECS簇和RDS实例必须是在相同的VPC,然后访问可以通过安全组进行配置.最简单的方法是:
本教程有截图,说明了去哪里.
完全披露:本教程以Bitnami的容器为特色,我为Bitnami工作.然而,这里表达的想法是我自己的,而不是Bitnami的意见.
弄清楚发生了什么,发布在这里以防万一它可以帮助其他人.
容器内的请求是攻击RDS的公共IP而不是私有(这是安全组的工作方式).看起来Docker容器内的DNS正在使用8.8.8.8 google dns,并且这不会让AWS黑魔法将rds端点转换为私有ip.
例如:
DOCKER_OPTS="--dns 10.0.0.2 -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock -g /mnt/docker"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12556 次 |
| 最近记录: |