You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure容器实例中Prisma无法连接MySQL数据库求助

解决Azure容器实例中Prisma无法连接MySQL的问题

以下是针对你的场景的排查和解决步骤:

1. 验证容器间网络连通性

先确认app容器能否通过网络访问db容器的3306端口:

  • 执行Azure CLI命令进入app容器:
    az container exec --resource-group <resource_group> --name <container_group> --container-name app --exec-command "/bin/bash"
    
  • 在容器内运行以下命令测试网络:
    # 测试DNS解析是否正常
    nslookup db
    # 测试端口连通性(若没有telnet,先执行:apt update && apt install -y telnet)
    telnet db 3306
    # 或使用nc(已安装的情况下)
    nc -zv db 3306
    

如果DNS解析失败,说明ACI容器组内部DNS存在异常;如果端口不通,需检查db容器是否真的在监听0.0.0.0:3306。

2. 强制MySQL监听所有网络地址

MySQL默认可能仅绑定127.0.0.1(本地回环地址),导致容器间无法通过TCP访问。需要修改MySQL配置:

  • 修改db的Dockerfile,添加自定义配置:
    FROM mysql:8.2.0
    # 新增自定义配置文件,设置监听所有地址
    COPY my.cnf /etc/mysql/conf.d/
    COPY init-prod.sql /docker-entrypoint-initdb.d/init.sql
    EXPOSE 3306
    
  • 创建my.cnf文件,内容如下:
    [mysqld]
    bind-address = 0.0.0.0
    

重新构建db镜像并部署到ACI后,再次测试连接。

3. 核对环境变量一致性

确保app容器的DATABASE_URL参数与db容器的环境变量完全匹配:

  • DATABASE_URL中的<database_user>必须等于db容器的MYSQL_USER
  • DATABASE_URL中的<database_password>必须等于db容器的MYSQL_PASSWORD
  • DATABASE_URL中的<database_name>必须等于db容器的MYSQL_DATABASE
    可在app容器内打印环境变量确认:
echo $DATABASE_URL

4. 排查Azure File Share挂载的影响

你的db容器将Azure File Share挂载到/var/lib/mysql,日志中出现socket创建失败的警告:

ln: failed to create symbolic link '/var/lib/mysql/mysql.sock': Operation not supported

虽然TCP连接不依赖Unix Socket,但Azure File Share的权限或兼容性问题可能间接影响MySQL运行。可临时改用emptyDir(无持久化,仅用于测试)验证:
修改ACI部署YAML中的db-data卷:

- name: db-data
  emptyDir: {}

重新部署后测试迁移,若能正常连接,说明Azure File Share配置存在问题,可尝试调整共享权限或切换到Azure磁盘存储。

5. 验证Prisma与MySQL版本兼容性

确认你使用的Prisma版本支持MySQL 8.2.0:

  • 在app容器内查看Prisma版本:
    npx prisma --version
    

若版本较旧,升级到最新稳定版:

npm install prisma@latest

重新构建app镜像并部署后测试。

6. 绕过Prisma直接测试MySQL连接

使用MySQL客户端直接连接,排除Prisma自身的问题:

  • 在app容器内安装MySQL客户端:
    apt update && apt install -y mysql-client
    
  • 执行连接命令:
    mysql -h db -u <database_user> -p<database_password> <database_name>
    

若能成功连接,说明问题出在Prisma的配置或版本上;若连接失败,根据MySQL的错误提示进一步排查(如认证错误、权限不足等)。


内容的提问来源于stack exchange,提问作者Max Liapkalo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:20:57