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

Docker Compose部署Nginx+PHP(Laravel)+MySQL遇[2002]连接拒绝错误

解决Docker Compose下Laravel连接MySQL的[2002]拒绝错误

我来帮你排查这个连接问题,几个核心配置错误导致了这个问题,逐个修正就能解决:

1. 修正数据库主机地址

你当前.env里的DB_HOST=127.0.0不仅格式错误(少了最后一位),更关键的是在Docker Compose的内部网络中,容器之间不能用127.0.0.1互相访问——每个服务都是一个独立的节点,需要用服务名称来寻址。你的mysql服务名称是mysql,所以把.env里的DB_HOST改成:

DB_HOST=mysql

2. 统一数据库密码

你的docker-compose.yml里设置的MySQL root密码是root,但.env里的DB_PASSWORD=secret和它不一致,这会直接导致认证失败。把.env里的密码改成和docker-compose一致:

DB_PASSWORD=root

3. 确认数据库是否存在

你的.env指定要连接homestead数据库,但默认情况下MySQL容器启动时不会自动创建这个库。有两种解决方式:

  • 手动进入MySQL容器创建:
    docker exec -it [你的mysql容器名] mysql -uroot -proot
    CREATE DATABASE homestead;
    
  • 或者在docker-compose.yml的mysql服务里添加环境变量,让容器启动时自动创建库:
    mysql:
      image: mariadb
      ports:
        - '33060:3306'
      volumes:
        - ./db:/var/lib/mysql
      environment:
        - MYSQL_ROOT_PASSWORD=root
        - MYSQL_DATABASE=homestead # 新增这一行
      restart: always
    

4. 刷新Laravel配置缓存

修改完.env后,需要让Laravel加载新的配置。可以进入PHP容器执行:

docker exec -it [你的php容器名] php artisan config:cache

或者直接重启PHP容器,让配置生效。

另外补充:你把宿主机的3306映射到33060是完全没问题的,这不会影响容器内部的连接,因为容器之间用的是内部端口3306,这点你不用改。

修正后的完整.env示例:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=root
DB_PASSWORD=root

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:33:19