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

Ubuntu主机初始化MySQL后,如何在Docker容器中访问该数据库?

解决Docker容器访问主机MySQL数据库的问题

容器内的localhost是容器自身的回环地址,不是你的Ubuntu主机,所以直接用localhost无法连接到主机上的MySQL服务,这是核心原因。以下是具体解决步骤:

步骤1:配置主机MySQL允许远程访问

  • 编辑MySQL配置文件,路径通常为/etc/mysql/mysql.conf.d/mysqld.cnf:
    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    
  • 找到bind-address = 127.0.0.1这一行,修改为bind-address = 0.0.0.0(允许所有网卡监听),或者直接注释掉该行。
  • 保存退出后,给root用户授权远程访问权限(替换你的root密码为实际密码):
    mysql -u root -e "GRANT ALL PRIVILEGES ON example.* TO 'root'@'%' IDENTIFIED BY '你的root密码'; FLUSH PRIVILEGES;"
    

    注:%表示允许任何IP访问,为了安全,也可以指定容器所在网段,比如Docker默认桥接网段172.17.0.0/16

  • 重启MySQL服务使配置生效:
    sudo systemctl restart mysql
    

步骤2:获取主机的局域网IP

在Ubuntu主机上执行以下命令,找到你的局域网IP(通常为192.168.x.x或10.x.x.x格式):

ip addr show

比如输出中inet 192.168.1.100/24就是主机的局域网IP。

步骤3:修改容器内的连接串

将原来的连接串mysql://root@localhost/example修改为:

mysql://root:你的root密码@主机局域网IP/example

额外注意事项

  • 检查主机防火墙是否开放3306端口(MySQL默认端口):
    sudo ufw allow 3306
    
  • Linux环境下启动容器时,可添加--add-host=host.docker.internal:host-gateway参数,容器内就能用host.docker.internal代替主机IP,连接串变为:
    mysql://root:你的root密码@host.docker.internal/example
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:25:39