Laravel Sail(MacOS):无法通过本地数据库工具查看Docker数据库
问题分析与解决步骤
首先纠正一个误解:Docker卷的作用是持久化容器内的MySQL数据,防止容器销毁后数据丢失,它并不会实现容器数据库和本地数据库的双向同步——你没法直接通过本地文件系统访问容器里的数据库文件,必须通过网络连接来访问。
针对你无法用TablePlus连接Docker内MySQL的问题,按以下步骤排查:
1. 确认端口映射是否正常
- 检查项目根目录的
.env文件,确认FORWARD_DB_PORT的值是3306(或者你自定义的端口,只要本地没被占用) - 执行
sail ps查看mysql容器的端口状态,确认0.0.0.0:3306->3306/tcp这类映射存在 - 如果本地装了原生MySQL,会占用3306端口,此时需要修改
.env里的FORWARD_DB_PORT为其他值(比如3307),然后重启容器:sail down && sail up -d
2. 检查TablePlus的连接参数
连接时必须用以下参数:
- 主机:
127.0.0.1(不要用localhost,MacOS下localhost默认走Unix Socket,而Docker映射的是TCP端口,会导致连接失败) - 端口:和
.env里FORWARD_DB_PORT一致,默认3306 - 用户名:
.env里的DB_USERNAME(或者用root用户) - 密码:
.env里的DB_PASSWORD - 数据库名:
.env里的DB_DATABASE
3. 验证MySQL用户的远程访问权限
- 进入MySQL容器:
sail exec mysql bash - 登录MySQL:
mysql -uroot -p,输入.env里的DB_PASSWORD - 执行以下命令查看用户权限:
SELECT user, host FROM mysql.user; - 确保你用来连接的用户(比如
DB_USERNAME对应的用户)的host字段是%(允许从任意IP连接),如果不是,执行:
替换成你ALTER USER '你的用户名'@'%' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES;.env里的DB_USERNAME和DB_PASSWORD
4. 排查MacOS防火墙
打开「系统设置」-「网络」-「防火墙」,确认没有阻止对应端口的入站连接,或者临时关闭防火墙测试连接是否正常。
内容的提问来源于stack exchange,提问作者k1op0ly apps
相关产品推荐
相关产品推荐

