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

Docker部署Laravel执行php artisan migrate报getaddrinfo域名解析错误

问题根因

你的报错核心是php容器无法通过容器名docker_database解析到数据库服务的地址,主要有两个常见原因:

  1. 数据库服务未加入php所在的自定义网络
  2. 执行迁移命令的环境不对/配置未生效

具体解决步骤

  • 第一步:修正docker-compose.yml的网络配置
    你当前配置里只有nginx、php服务加入了自定义的laravel桥接网络,database服务没有指定网络,Docker会默认将它放到全局默认的bridge网络,和php服务网络隔离,自然无法通过容器名互访。在database服务的配置块中添加网络配置即可:

    database:
      image: mysql:8.0
      container_name: docker_database
      # 保留你原来的所有配置,新增下面两行
      networks:
        - laravel
    
  • 第二步:重启Docker服务加载配置
    执行以下命令重启所有容器:

    docker-compose down && docker-compose up -d
    
  • 第三步:验证网络连通性
    进入php容器测试是否能解析到数据库地址:

    docker exec -it my_app ping docker_database
    

    正常返回ping的响应包说明网络已经打通。

  • 第四步:清除Laravel配置缓存后执行迁移
    先清理旧的配置缓存,再执行迁移命令:

    docker exec -it my_app php artisan config:clear
    docker exec -it my_app php artisan migrate
    

补充说明

你本地Sequel Pro能正常连接,是因为你访问的是宿主机的127.0.0.1:3306端口(Docker已经把数据库的3306端口映射到宿主机了),和容器内的网络访问逻辑不同,所以才会出现本地能连、容器内连不上的情况。

如果后续网络通了之后报认证错误,是因为MySQL8.0默认使用caching_sha2_password认证插件,部分PHP版本不支持,只需要在database服务的environment配置中新增一行MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=mysql_native_password,重启容器即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:06:04