弹性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中定义多个任务

升级弹性 beantalk 堆栈时,Rails 应用程序无法部署

为啥我的弹性 beantalk 实例在我部署时被替换?