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

使用Dusk、Docker与Laravel时如何运行数据库迁移并解决解析报错?

问题核心原因

该报错本质是Dusk运行时触发的Web应用进程,无法解析你配置的数据库主机名:你此前命令行执行迁移生效的配置是适配CLI容器的网络规则,但Dusk测试时应用实际运行在Web服务容器的网络环境下,两者对数据库主机的解析逻辑不一致。

修复步骤
  • 调整.env.dusk的数据库主机配置
    将.env.dusk中的DB_HOST值设置为Docker Compose中定义的MySQL服务的服务名,比如你的docker-compose.yml里数据库服务命名为mysql,就配置DB_HOST=mysql,不要使用127.0.0.1、localhost或CLI容器单独配置的其它主机别名。

  • 强制Dusk优先加载dusk环境配置
    两种方式二选一即可:

    1. 运行Dusk命令时指定环境:php artisan dusk --env=dusk(注意命令拼写为artisan而非artisian,避免笔误报错)
    2. 在tests/DuskTestCase.php的setUp方法中添加强制加载逻辑:
    protected function setUp(): void
    {
        parent::setUp();
        $this->loadEnvironmentFrom('.env.dusk');
    }
    
  • 在Web服务容器内执行dusk环境的数据库迁移
    不要在CLI容器内执行迁移,需要进入运行Web应用的容器(比如php-fpm、nginx对应的应用服务容器)内操作:

    1. 进入容器命令:docker compose exec <你的Web服务名称> bash
    2. 容器内执行迁移:php artisan migrate --env=dusk
      如需自动化执行,可以在phpunit.dusk.xml的<php>节点下添加<env name="APP_ENV" value="dusk"/>,确保所有Dusk相关操作默认加载dusk环境配置。
  • 验证Docker网络配置
    确认Web服务容器和MySQL容器在Docker Compose中配置了相同的networks,没有做网络隔离。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:24:04