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

Docker部署Laravel时数据库连接拒绝问题求助

解决Laravel Docker部署的数据库连接拒绝问题

问题排查与修正步骤

1. Docker Compose配置错误

你的docker-compose.yml存在三个关键问题:

  • 端口映射错误:MySQL容器内部默认监听3306端口,配置里的3307:3307会导致容器内MySQL无法正常对外提供服务,需改为3307:3306(外部端口3307映射到容器内部3306端口)
  • 环境变量格式错误:MYSQL_ROOT_USER =root中等号两侧的空格会导致Docker无法识别正确的变量值,必须改为MYSQL_ROOT_USER=root
  • 重复设置密码:重复声明了MYSQL_ROOT_PASSWORD=secret,删掉其中一行即可

修正后的docker-compose.yml数据库服务配置:

#base de donnees
database:
    image: mysql:8.0
    ports:
        - 3307:3306
    environment:
        - MYSQL_DATABASE=myDb
        - MYSQL_ROOT_USER=root
        - MYSQL_ROOT_PASSWORD=secret
    volumes:
        - ./mysql:/var/lib/mysql

2. Laravel .env配置错误

你的.env文件存在两个明显错误:

  • 数据库用户名错误:Docker配置中设置的数据库root用户名为root,但.env里写了DB_USERNAME=secret,需改为DB_USERNAME=root
  • 数据库端口错误:同一Docker网络内的容器通信使用内部端口,而非映射到外部的3307,所以DB_PORT要改为3306(Laravel容器与MySQL容器在同一网络,直接访问内部端口即可)

修正后的.env数据库配置段:

DB_CONNECTION=mysql
DB_HOST=database
DB_PORT=3306
DB_DATABASE=myDb
DB_USERNAME=root
DB_PASSWORD=secret

3. VPS IP使用说明

不需要在配置中使用VPS的IP:

  • Docker容器之间通过服务名(此处为database)自动解析通信,DB_HOST=database的配置是正确的
  • 仅当你需要从VPS外部连接该MySQL数据库时,才需要使用VPS的IP加上映射的3307端口,Laravel项目与数据库在同一Docker网络内,无需外部IP

最终执行步骤

  1. 停止并清理现有容器:
docker-compose down
  1. 重新启动服务:
docker-compose up -d
  1. 运行Laravel数据库迁移(替换[laravel-service-name]为你的Laravel服务在docker-compose.yml中的名称):
docker-compose exec [laravel-service-name] php artisan migrate

内容的提问来源于stack exchange,提问作者Ibrahima Koné

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:15:39