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

Laravel/Vue Docker容器中MySQL无法启动及迁移失败求助

Laravel/Vue应用弃用Sail后MySQL连接失败问题解决

问题背景

弃用Sail搭建Laravel/Vue应用,已将环境变量DB_HOST改为Docker Compose中数据库容器名称database,执行docker compose up --build后MySQL服务看似启动正常,但执行php artisan migrate:fresh --seed时出现主机名解析失败的错误。

配置信息

docker-compose.yml配置

version: "3.8"

services:
  laravel-vue-app:
    build: .
    ports:
        - "8080:8080"
    depends_on:
        - mysql
    volumes:
        - .:/var/www/html
        - /var/www/html/node_modules
        - /var/www/html/vendor
    networks:
        - app-network
  mysql:
    image: "mysql/mysql-server:8.0"
    container_name: database
    ports:
        - "${FORWARD_DB_PORT:-3306}:3306"
    environment:
        MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
        MYSQL_DATABASE: "${DB_DATABASE}"
        MYSQL_USER: "${DB_USERNAME}"
        MYSQL_PASSWORD: "${DB_PASSWORD}"
        MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
volumes:
  mysql-data:
networks:
  app-network:

.env配置片段

DB_CONNECTION=mysql
DB_HOST=database
DB_PORT=3306

报错信息

SQLSTATE[HY000] [2002] php_network_getaddresses: 
getaddrinfo for database failed: nodename nor servname provided, or not known (Connection: mysql, SQL: select table_name as `name`, 
(data_length + index_length) as `size`, table_comment as `comment`, 
engine as `engine`, table_collation as `collation` from 
information_schema.tables where table_schema = 'bigapp' and table_type
in ('BASE TABLE', 'SYSTEM VERSIONED') order by table_name)

解决步骤

核心问题

宿主机终端无法直接解析Docker容器的内部主机名database,必须在Laravel应用容器内部执行迁移命令——容器间在同一网络下才能通过容器名互相访问。

具体操作

  1. 查看应用容器名称
    执行以下命令获取运行中的容器列表,找到laravel-vue-app对应的容器名称:

    docker ps
    
  2. 进入应用容器
    替换[容器名]为上一步获取的实际名称,进入容器终端:

    docker exec -it [容器名] bash
    
  3. 执行迁移命令
    在容器内部执行数据库迁移和填充:

    php artisan migrate:fresh --seed
    

额外排查点

  • 验证网络连通性:确认两个容器在同一网络,执行docker network inspect app-network,检查Containers字段下是否同时存在应用容器和database容器。
  • 确认MySQL服务就绪:depends_on仅保证容器启动顺序,不代表服务已就绪。查看MySQL日志确认服务启动完成:
    docker logs database
    
    日志中出现ready for connections字样说明服务可用。
  • 检查.env变量加载:进入应用容器后,执行echo $DB_HOST,确认输出值为database。
  • 验证数据库用户权限:若迁移仍失败,可临时将.env中的DB_USERNAME改为root测试,排除权限问题。

内容的提问来源于stack exchange,提问作者clew-bot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:37:56