mysql - FastAPI-mysql 码头工人。mysql return (2003, "Can't connect to MySQL server on '127.0.0.1')
问题描述
这是我的 docker-compose-yml 文件。首先,我尝试运行 db 服务,它工作正常并且 docker 运行成功。但是当我运行应用程序服务时,在终端中显示已连接到数据库,但我收到错误消息(2003,“无法连接到‘127.0.0.1’上的 MySQL 服务器)
version: '4'
services:
app:
build: .
ports:
- "8000:8000"
env_file:
- .env
depends_on:
- db
links:
- db
db:
environment:
- MYSQL_ROOT_PASSWORD=root
-
image: mysql
ports:
- "3307:3307"
env_file:
- .env
在此处输入图像描述
解决方案
FastAPI 应用程序使用什么环境变量连接到 MySQL 主机?
如果您使用 docker-compose 网络,则服务需要使用容器名称才能相互(即mysql://db:3307/db_name_here
)而不是localhost
。
默认情况下,Compose 会为您的应用程序设置一个网络。服务的每个容器都加入默认网络,并且可以被该网络上的其他容器访问,并且可以通过与容器名称相同的主机名被它们发现。
有关网络的更多信息可以在他们的文档中找到。
同样值得注意的是,由于您正在使用,links
您可以像这样设置别名:
version: "3.9"
services:
web:
build: .
links:
- "db:database"
db:
image: postgres
推荐阅读
- javascript - 使用 JSON 数据创建 Highcharts 热图
- apache-spark-sql - 如何将第一行从现有数据框中转换为列
- typescript - 使用 ts-mockito 和 Typescirpt 模拟 Express 请求
- arrays - 如何在 Laravel 中获取和拆分数组值
- c - c中具有未知参数的通用比较器函数
- python - 除非使用 Jupiter Notebook,否则无法调用 datetime 模块
- ruby - 如何使用 RubyVM 将 ruby 代码编译为需要源文件的字节码?
- python - 使用 runserver 命令启动 Django 时出现错误
- kubernetes - 为什么 keycloak-tls 在集群中没有被禁用?
- performance - 如何监控 BigQuery 中非常缓慢的数据加载