Laravel Docker容器无法连接本地MariaDB服务器问题求助
解决Docker中Laravel连接同一服务器MariaDB的1045权限错误
1. 修正MariaDB用户的主机权限配置
你创建的'user2'@'ip_server:port_app'格式错误——MariaDB的用户主机字段不能包含端口,它仅用于限制用户的连接来源IP。根据错误提示,你的Laravel容器是从185.180.230.129发起连接的,需要创建对应权限的用户:
登录MariaDB执行以下SQL:
-- 删除错误格式的用户(如果存在) DROP USER IF EXISTS 'user2'@'ip_server:port_app'; -- 创建允许从任意IP连接的user2(如需限制,把%换成185.180.230.129) CREATE USER 'user2'@'%' IDENTIFIED BY '你的数据库密码'; -- 授予该用户目标数据库的所有权限 GRANT ALL PRIVILEGES ON 你的数据库名.* TO 'user2'@'%'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
2. 调整Laravel .env的数据库连接配置
- 如果你的Docker版本是20.10+,
host.docker.internal在Linux上需要启动容器时添加参数:docker run --add-host host.docker.internal:host-gateway ...,否则直接使用宿主机的内网IP(比如Docker默认网关172.17.0.1)或服务器公网IP作为DB_HOST。 - 正确的.env配置示例:
DB_CONNECTION=mysql DB_HOST=172.17.0.1 # 或host.docker.internal(需添加启动参数) DB_PORT=3306 DB_DATABASE=你的数据库名 DB_USERNAME=user2 DB_PASSWORD=你的数据库密码
3. 确保MariaDB允许外部连接
编辑MariaDB的配置文件(通常是/etc/mysql/mariadb.conf.d/50-server.cnf),找到bind-address项:
# 把原有的127.0.0.1改成0.0.0.0(允许所有IP访问) bind-address = 0.0.0.0
修改后重启MariaDB服务:
sudo systemctl restart mariadb
4. 检查服务器防火墙规则
确保服务器防火墙允许容器的来源IP访问3306端口:
- 若使用ufw:
# 允许Docker默认内网段访问3306 sudo ufw allow from 172.17.0.0/16 to any port 3306 # 或直接允许错误提示的IP sudo ufw allow from 185.180.230.129 to any port 3306
- 若使用iptables,添加对应规则即可。
内容的提问来源于stack exchange,提问作者Даниил Чернюк
相关产品推荐
相关产品推荐

