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

Laravel应用Docker容器内无法连接MySQL数据库求助

问题排查与修复方案

1. MySQL初始化脚本路径错误

你的docker-compose.yml中,db服务的初始化脚本挂载路径写错了——官方MySQL镜像的初始化目录是/docker-entrypoint-initdb.d/,你漏掉了中间的横杠,导致SQL脚本不会被执行,数据库无法完成初始化。

2. MySQL环境变量配置错误

MYSQL_ROOT不是MySQL官方镜像的有效环境变量,该配置无意义,直接删除即可(你已设置MYSQL_ALLOW_EMPTY_PASSWORD: "true",无需额外配置root账号相关变量)。

3. Laravel容器卷挂载无效

当前main服务的卷配置- /test/var/www/html是匿名卷,不会同步本地代码到容器内的/app工作目录,导致容器内代码可能不是最新版本,且本地代码修改无法同步到容器。

4. 未等待MySQL服务就绪

depends_on仅保证容器启动顺序,不会等待MySQL服务完全就绪,Laravel容器启动后可能尝试连接未就绪的MySQL,直接触发连接错误。


修正后的配置文件

docker-compose.yml

version: '3.8'
services: 
    main:
        build:
            context: .
            dockerfile: Dockerfile
        command: 'php artisan serve --host=0.0.0.0'
        volumes:
            - ./:/app # 同步本地代码到容器工作目录
        ports:
            - 8000:8000
        depends_on:
            db:
                condition: service_healthy # 等待MySQL健康检查通过后启动
    db:
        image: mysql:8.0
        environment:
            MYSQL_DATABASE: employee_app
            MYSQL_ALLOW_EMPTY_PASSWORD: "true"
        volumes:
            - /db_dumps/employee_app.sql:/docker-entrypoint-initdb.d/employee_app.sql # 修正初始化目录路径
            - db_data:/var/lib/mysql # 添加持久化卷,防止数据丢失
        ports:
            - "3306:3306"
        healthcheck:
            test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
            timeout: 20s
            retries: 10
volumes:
    db_data: # 定义持久化卷

Dockerfile

FROM php:8.0-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql sockets

# 仅保留从官方镜像复制composer,避免重复安装导致冲突
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY . .
RUN composer install --ignore-platform-reqs

操作步骤

  1. 清理旧容器与卷:
docker-compose down -v
  1. 重新构建并启动容器:
docker-compose up --build
  1. 查看MySQL容器日志,确认初始化脚本执行成功:
docker-compose logs db

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:25:24