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

运行Docker容器无法连接localhost数据库,本地可正常访问

问题分析与解决

核心原因

Docker容器内的localhost指向容器自身,而非宿主机。你本地Workbench能正常连接是因为它运行在宿主机环境,而容器里的API尝试访问容器内部的3306端口,自然找不到你的本地数据库。

解决方案

1. 修改DATABASE_URL(Windows/macOS)

将.env文件里的localhost替换为Docker官方提供的宿主机别名host.docker.internal:

DATABASE_URL=mysql://root@host.docker.internal:3306/database

2. 修改DATABASE_URL(Linux)

Linux下Docker默认不支持host.docker.internal,可选择两种方式:

  • 方式一:使用宿主机局域网IP
    先查询宿主机的局域网IP(例如192.168.1.100),替换到URL中:
    DATABASE_URL=mysql://root@192.168.1.100:3306/database
    
  • 方式二:使用host网络模式
    启动容器时添加--network host参数(此模式下容器共享宿主机网络,无需端口映射,注意避免端口冲突):
    docker run --network host --env-file .env --name container --restart always -d image
    

3. 确保MySQL允许远程连接

即使URL配置正确,若MySQL限制了连接来源,仍会失败:

  1. 用Workbench连接数据库,执行以下SQL(替换your_password为实际密码,若root无密码可省略IDENTIFIED BY部分):
    GRANT ALL PRIVILEGES ON database.* TO 'root'@'%' IDENTIFIED BY 'your_password';
    FLUSH PRIVILEGES;
    
  2. 检查MySQL配置文件(my.cnf或my.ini),确保bind-address设置为0.0.0.0(允许所有IP连接),而非仅127.0.0.1,修改后重启MySQL服务。

4. 重启容器

修改.env或配置后,重启容器使设置生效:

docker restart container

内容的提问来源于stack exchange,提问作者Illyrian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:21:04