Laravel通过ddev(Docker)部署时MySQL数据库连接与管理方法
Ddev部署的Laravel项目数据库配置相关解答
配置生效逻辑说明
你当前.env中配置的DB_HOST=db是ddev默认创建的MySQL数据库容器的服务名,Docker会在项目专属的内部网络中通过内置DNS将这个服务名解析到数据库容器的内部IP,因此Laravel容器发出的3306端口数据库请求会直接走Docker内部网络打到自带的数据库容器上,这也是你数据库迁移能正常运行的核心原因——容器环境默认和宿主机的服务、端口是隔离的。
查看当前配置对应数据库内容的方法
不需要修改现有配置,任选以下一种方式即可:
- 命令行交互查询:在项目根目录执行
ddev mysql命令,会直接进入数据库容器的MySQL命令行终端,可直接执行SQL语句查询、修改数据 - 第三方数据库客户端连接:在项目根目录执行
ddev describe,输出结果中会列出MySQL服务映射到宿主机的端口(一般为随机高位端口,不是默认3306),打开Navicat、DBeaver等客户端,连接信息填写:- 主机:
127.0.0.1 - 端口:上一步查到的宿主机映射端口
- 用户名、密码、数据库名:和
.env中配置的db、db、db一致即可
- 主机:
- 网页端管理工具:在项目根目录执行
ddev phpmyadmin,ddev会自动启动phpMyAdmin服务并打开对应浏览器页面,可直接在可视化界面浏览库表、操作数据。
连接宿主机本地MySQL服务的方法
可以连接,但不能直接将DB_HOST改为localhost:Laravel运行在Docker容器内部,容器内的localhost指向的是Laravel容器自身,而非你的宿主机,修改后会直接报连接拒绝错误。
正确操作步骤如下:
- 修改宿主机本地MySQL的配置文件,将绑定地址从默认的
127.0.0.1调整为0.0.0.0,允许来自非本机IP的连接,同时给目标数据库配置允许远程访问的账号权限 - 将项目
.env中的DB_HOST修改为host.docker.internal,这是Docker提供的固定域名,会自动解析到宿主机在Docker内部网络中的IP - 将
DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD全部修改为你本地MySQL服务对应的实际参数 - 项目根目录执行
ddev restart重启容器加载网络配置,之后执行数据库迁移测试连通性即可。
注意:切换到宿主机数据库后,ddev自带的数据库容器仍会默认运行,只是项目不会再向其中写入数据,如果不需要该服务可以修改ddev配置文件关闭自带数据库服务,节省系统资源。
内容的提问来源于stack exchange,提问作者Gaspar Giménez
相关产品推荐
相关产品推荐

