Laravel Sail双站点共用同一数据库出现连接拒绝问题求助
核心问题排查方向
1. 自有数据库3310端口连接拒绝问题
- 容器内部通信无需使用宿主机映射端口:你在宿主机用DBeaver连接的
127.0.0.1:3310是Docker映射到宿主机的端口,但第二个站点的Laravel容器和自身的MariaDB容器同属一个内部网络,.env里的DB_PORT应该填容器内部的默认端口3306,而非对外映射的3310,MariaDB容器内部本身只监听3306端口,写3310自然会触发连接拒绝。 - 确认
DB_HOST配置:同compose组内的数据库服务直接填服务名mariadb即可,不要填127.0.0.1或者宿主机IP。
2. 跨容器连接第一个站点3306数据库的1044权限问题
- 先修正连接地址配置:
不要用宿主机IP+3306的方式连接,同sail网络下直接填写第一个站点的MariaDB容器名作为DB_HOST(可执行docker ps查看容器名,通常格式为「第一个站点目录名-mariadb-1」),DB_PORT固定填3306即可。
注意两个站点的compose配置里数据库服务都叫mariadb,如果直接填mariadb作为主机名,会默认解析到当前站点自身的MariaDB容器,不会指向第一个站点的数据库。 - 校验数据库用户权限:
进入第一个站点的数据库,执行SQL查询SELECT user,host FROM mysql.user WHERE user='你的数据库用户名';,确认对应用户的host字段为%(允许任意来源访问),如果是localhost或者仅限定同组容器域名,需要手动执行授权语句:GRANT ALL PRIVILEGES ON 目标数据库名.* TO '你的用户名'@'%'; FLUSH PRIVILEGES; - 确认网络归属:执行
docker network inspect sail,确认两个站点的Laravel容器、第一个站点的MariaDB容器都已加入该网络,没有网络隔离的情况。
内容的提问来源于stack exchange,提问作者Michalis
相关产品推荐
相关产品推荐

