弹性beantalk docker应用程序无法连接到mysql
Posted
技术标签:
【中文标题】弹性beantalk docker应用程序无法连接到mysql【英文标题】:elastic beanstalk docker app cannot connect to mysql 【发布时间】:2018-03-31 06:30:54 【问题描述】:我有一个使用 Docker 运行小型 Laravel php API 的 ElasticBeanstalk 应用程序。
应用在 ElasticBeanstalk 中运行时无法连接到 mysql。
MySQL 数据库是一个公开可用的 AWS RDS 实例。
我已经在本地运行了我的 Docker 容器,并且应用可以正常连接。
当我部署到 ElasticBeanstalk 时,应用无法连接...
谁能指出我帮助调试的方向?
解决方案
对于其他偶然发现此问题的人:
解决方案是为 EC2 实例和 RDS 数据库创建一个新的安全组。两个安全组通过端口 3306 为实例和数据库开放了访问权限。
我还确保 EC2 实例在每个子网以及与我的数据库相同的 VPC 中都可用。
摘自以下答案以及我的一位 SysOps 朋友的帮助。
【问题讨论】:
安全组规则说:“默认情况下,安全组允许所有出站流量”...我有同样的问题,为什么不让我连接? 这是一个应该在 OP 中的相关链接:docs.aws.amazon.com/AWSEC2/latest/UserGuide/… 这个链接也是:***.com/questions/32893876/… 嗨@AlexanderMills 这是去年,所以我的记忆模糊不清,但是,我认为“安全组允许所有出站流量”是真的。您需要在 EC2 实例和 RDS 数据库上允许 3306 上的 入站 流量。两者都应该在同一个 VPC 中......并且在同一个子网中可用。这对你有帮助吗? @MattDavies 在这种情况下,您如何设置 docker 的数据库地址?请分享您是如何定义数据库地址环境变量的。 【参考方案1】:您可能需要检查附加到 Elastic Beanstalk 的 EC2 安全组规则,以允许 MYSQL 类型的端口 3306 上的 TCP。
【讨论】:
谢谢大家!是安全组,需要允许 EC2 实例和数据库上的端口 3306 上的流量,并且成功了 @MattDavies 呃,这是什么意思?你是怎么做到的?【参考方案2】:您的 ec2 实例很有可能没有分配公共 IP。如果您在 ec2 实例上尝试连接到没有公共 IP 的 RDS 的公共 IP,您将无法连接。
ec2 实例要么需要公共 IP,要么需要通过 NAT 进行外部互联网连接。
【讨论】:
有趣.. 我没有为实例提供公共 IP,但我确实使它们在所有子网和与数据库相同的 VPC 中可用。似乎成功了!以上是关于弹性beantalk docker应用程序无法连接到mysql的主要内容,如果未能解决你的问题,请参考以下文章
将 Docker 映像部署到 AWS 弹性 beantalk
将 django docker 容器部署到弹性 beantalk
从弹性beantalk上的docker-compose部署查看node.js日志(console.log)
如何在弹性beantalk docker json中定义多个任务