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
相关产品推荐
相关产品推荐

