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

Docker容器中Laravel 11无法连接MySQL及服务访问问题求助

解决Laravel 11 Docker部署的三个核心问题

1. Laravel服务无法访问localhost:8000

  • 核对docker-compose.yml中Laravel服务的端口映射配置,确保本地端口8000正确映射到容器内的服务端口。比如用artisan serve启动的话,配置应为ports: ["8000:8000"];用Nginx+PHP-FPM的话,需映射到Nginx的80端口:ports: ["8000:80"]。
  • 执行docker compose ps查看Laravel容器状态,若显示Exit或Restarting,进入容器排查服务启动失败原因:docker compose exec laravel bash,手动运行启动命令(如php artisan serve或nginx -t)查看报错。
  • 检查本地防火墙是否拦截了8000端口,临时关闭防火墙测试,或添加端口放行规则。

2. MySQL连接错误:SQLSTATE[HY000] [2002] getaddrinfo failed

  • 修改Laravel .env中的DB_HOST值,不能用localhost,要替换成docker-compose.yml中MySQL服务的名称(比如你的MySQL服务定义为mysql,则DB_HOST=mysql)。Docker容器间通过服务名称解析地址,localhost会指向容器自身而非MySQL容器。
  • 确认MySQL服务的环境变量配置正确,确保MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD与Laravel .env中的对应参数一致:
    mysql:
      image: mysql:8.0
      environment:
        MYSQL_DATABASE: laravel_db
        MYSQL_USER: laravel_user
        MYSQL_PASSWORD: laravel_pass
        MYSQL_ROOT_PASSWORD: root_pass
      volumes:
        - mysql_data:/var/lib/mysql
    
  • 为Laravel服务添加依赖等待,确保MySQL完全启动后再启动Laravel,避免连接时序问题:
    laravel:
      build: .
      depends_on:
        mysql:
          condition: service_healthy
    mysql:
      image: mysql:8.0
      healthcheck:
        test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
        timeout: 20s
        retries: 10
    

3. 重复docker compose up --build触发'ContainerConfig' KeyError

  • 彻底清理旧容器与网络:执行docker compose down(若需保留MySQL数据卷,不要加-v参数),避免残留异常状态。
  • 清理Docker缓存:运行docker system prune -a,删除无用的镜像、容器和网络,解决缓存导致的配置冲突。
  • 验证docker-compose.yml语法正确性:执行docker compose config,排查配置文件中的语法错误。
  • 更新Docker与Docker Compose到最新稳定版本,旧版本存在的已知bug可能引发此错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:33:25