本地Python应用用mysql-connector-python连接Docker MySQL失败求助
问题排查与解决
核心矛盾分析
你报错提示Unknown MySQL server host 'mysql',但提供的main.py中host配置的是127.0.0.1,这说明你实际运行的代码大概率和当前提供的不一致:要么是代码里host被误写为mysql,要么是修改代码后未保存就执行了脚本。
针对性解决步骤
1. 修正代码中的主机配置
如果代码里确实把host写成了mysql,直接改成127.0.0.1或localhost即可。原因是:本地Python程序不在Docker Compose创建的专属网络内,无法通过服务名mysql解析容器地址,必须使用宿主机IP(或localhost)+ 映射的端口访问。
2. 若代码配置正确,检查以下点
- 确认端口映射生效:执行
docker ps查看mysql容器的PORTS列,需显示0.0.0.0:3306->3306/tcp。若未显示,重新执行docker-compose down && docker-compose up。 - WSL2后端适配:如果你的Docker用的是WSL2后端,尝试将
host改为host.docker.internal——这是Docker提供的宿主机内部网络别名,解决WSL2与Windows宿主机localhost隔离的问题。 - 防火墙拦截排查:临时关闭Windows防火墙后重试,或在防火墙规则中允许Python程序访问3306端口。
- 容器初始化状态:MySQL容器启动后需要几秒完成服务初始化,不要刚启动就运行Python脚本。可通过
docker logs mysql查看日志,直到出现ready for connections提示再执行脚本。
额外优化建议
你的docker-compose.yml中expose: - 3306是多余配置,ports已经完成了宿主机与容器的端口映射,expose仅声明容器内部开放端口,对宿主机访问无影响,可直接删除。
内容的提问来源于stack exchange,提问作者yannis van achter
相关产品推荐
相关产品推荐

