如何从Docker容器连接宿主机MySQL数据库?
解决Docker容器访问宿主机MySQL的Socket连接错误
你遇到的错误是因为容器内没有宿主机MySQL的socket文件,默认用localhost连接时会尝试通过socket通信,导致无法找到对应文件。以下是几种可行的解决方法:
改用TCP/IP连接(推荐方案)
放弃socket连接,直接通过宿主机的IP地址访问MySQL:- Linux环境:查看Docker网桥的宿主机IP,执行
ip addr show docker0,通常为172.17.0.1,将数据库连接地址改为这个IP; - Mac/Windows(Docker Desktop):直接用
host.docker.internal作为连接地址; - 确保MySQL允许远程连接:修改
my.cnf(或my.ini),将bind-address设为0.0.0.0,然后给数据库用户授权远程访问权限:GRANT ALL ON *.* TO '你的用户名'@'%' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES; - 连接配置中指定端口为
3306(MySQL默认端口),使用TCP/IP方式连接。
- Linux环境:查看Docker网桥的宿主机IP,执行
挂载宿主机Socket到容器
如果必须使用socket连接,启动容器时添加挂载参数,将宿主机的MySQL socket文件映射到容器内的对应路径:docker run -v /var/lib/mysql/mysql.sock:/var/lib/mysql/mysql.sock [你的容器镜像名称]注意:需要确保容器内的进程拥有读取该socket文件的权限,可调整宿主机上
mysql.sock的权限,或在容器内以与宿主机MySQL相同的用户运行进程。确认Socket文件的真实路径
先验证宿主机上MySQL socket的实际路径,执行命令:mysql_config --socket如果输出不是
/var/lib/mysql/mysql.sock,则挂载时要使用真实路径进行映射。
内容的提问来源于stack exchange,提问作者user2712873
相关产品推荐
相关产品推荐

