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

Docker部署MySQL无法连接问题求助(NestJS+TypeORM环境)

Docker部署MySQL无法连接的排查方案

问题场景

使用NestJS、TypeORM和Docker搭建API时,启动MySQL容器后无法从宿主机连接,执行命令及报错如下:

[mile@miles book-api]$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=12345 -d mysql:latest
3818cc3467f4ffc8be132a9670b097cc316ee75597d996635060b24213d7716b
[mile@miles book-api]$ mysql -u root -h 172.17.0.2 -p12345
mysql: Deprecated program name. It will be removed in a future release, use '/usr/bin/mariadb' instead
ERROR 2002 (HY000): Can't connect to server on '172.17.0.2' (115)

操作目录包含.env、ormconfig.json和docker-compose.yml文件,已拉取mysql:latest镜像。

已尝试的无效方案

  • 切换到MariaDB(不符合工作要求,放弃)
  • 确认容器IP地址正确
  • 验证root密码正确
  • 确认容器处于运行状态(无异常)
  • 修改宿主机MariaDB配置文件/etc/mysql/mariadb.conf.d/50-server.cnf,将bind-address = 127.0.0.1改为bind-address = 0.0.0.0并重启服务(无效)

可能的错误原因及解决方法

1. 容器端口未映射到宿主机

当前启动命令未做端口映射,宿主机无法直接通过容器IP访问MySQL服务。需添加端口映射参数重新启动容器:

docker run --name mysql -e MYSQL_ROOT_PASSWORD=12345 -p 3306:3306 -d mysql:latest

之后可通过localhost或宿主机IP连接:

mysql -u root -h localhost -p12345

2. MySQL用户权限限制

MySQL 8.0+默认root用户仅允许本地登录,需修改权限允许远程访问:

  1. 进入容器:
    docker exec -it mysql bash
    
  2. 登录MySQL:
    mysql -u root -p12345
    
  3. 执行权限修改SQL:
    ALTER USER 'root'@'%' IDENTIFIED BY '12345';
    FLUSH PRIVILEGES;
    

注意:生产环境请勿直接开放%权限,建议指定特定IP段以提升安全性。

3. 宿主机防火墙拦截

检查宿主机防火墙是否开放3306端口,以Raspbian系统为例:

sudo ufw allow 3306
sudo ufw reload

4. Docker网络配置异常

  • 通过以下命令确认容器IP是否正确:
    docker inspect mysql | grep "IPAddress"
    
  • 若使用自定义Docker网络,需确保容器与宿主机处于同一网络环境,或通过端口映射进行访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:21:16