【问题标题】:How to Connect to Dockerized MySQL Database running on EC2 from Flask Web App如何从 Flask Web App 连接到运行在 EC2 上的 Dockerized MySQL 数据库
【发布时间】:2020-04-12 03:59:00
【问题描述】:

我正在尝试从 Flask 应用程序连接到 dockerized 并存储在 EC2 中的 MySQL 数据库。为了手动访问数据库,您必须使用 pem 文件 ssh 进入,然后执行到 docker 映像中以访问数据库。我将如何从应用程序本身连接到这个。我尝试过同时使用 sql alchemy 或 mysql,但如果我尝试使用 ec2 实例的 ip 地址,它就会超时。我的猜测是我可能需要在 Flask 应用程序中使用 Dockerfile 做一些事情?我对 Flask 和 Docker 还很陌生,所以我不确定最好的做法是什么,也无法在网上找到很多信息。

【问题讨论】:

  • 您能否详细说明有关 Docker 容器的信息? 3306端口暴露了吗?
  • 3306 未暴露。我相信 3000 是,这就是应用程序的实际节点后端所在
  • 实际上,在运行 docker-compose 时,也会暴露 3306。我没有编写后端或任何 docker 文件:p
  • 您需要从同一个服务器还是从某个远程连接到数据库?
  • 不确定我是否理解你的问题,所以我可以更深入地了解我正在做什么,希望能回答你的问题。应用程序的后端和数据库正在 docker 化并托管在 ec2 上。我正在编写一个管理面板来对数据库中的信息进行一些数据分析。这是在 Flask 中完成的,因此为什么我需要 Flask 应用程序来访问数据库并提取有用的分析。我能够使用在 docker-compose 中建立的本地数据库版本进行测试,它运行良好,但我不确定如何做到这一点

标签: mysql docker flask amazon-ec2


【解决方案1】:

简而言之,如果您能够使用 MySQL 客户端工具之一连接到 MySQL 服务器,那么您将能够使用 Flask 连接到它。

过程没有那么简单,没有任何附加信息我不能给你执行命令,但总体逻辑如下。

  • MySQL 在 docker 容器内有一个服务器,在 3306 端口上工作。首先,该端口应该暴露给服务器并且可能绑定到服务器的 3306 端口,这可以在docker run 命令上完成。 你需要运行类似docker run -p 3306:3306 的东西。查看更多详情here
  • 其次,如果你想从远程连接到实例,你需要确保端口可以从你想要的任何地方访问,docker会自动为你添加一个iptable记录,但要确保如果没有防火墙阻止了该端口。

鉴于您收到超时,问题很可能是 Flask 无法通过该端口连接。

【讨论】:

    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 2019-03-23
    • 2021-11-10
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多