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

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,提问作者Даниил Чернюк

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:26:08