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

使用docker-compose连接本地MySQL报错:Can't connect to MySQL server on 'localhost:3306'(99)

问题分析与解决方案

你的错误核心是network_mode: host配置与端口映射、MySQL绑定地址的冲突,导致本地无法连接容器内的MySQL服务。以下是两种可行的解决办法:

方案一:移除host网络模式(推荐)

host模式会让容器直接使用宿主机的网络栈,此时ports映射配置会失效,反而容易引发端口冲突。移除该配置后,使用Docker默认的桥接网络即可正常通过端口映射访问:

修改后的docker-compose.yml:

db-my-sql:
  image: mysql:latest
  container_name: mysql_db
  restart: always
  environment:
    MYSQL_DATABASE: "xyz"
    MYSQL_ROOT_PASSWORD: "root1234!"
  ports:
    - "3307:3306"
# 移除 network_mode: "host" 配置

连接方式

本地通过localhost:3307连接MySQL:

  • 命令行:mysql -h localhost -P 3307 -u root -proot1234!
  • 代码中连接地址填写localhost,端口3307

方案二:保留host网络模式并修正绑定地址

如果必须使用host模式,需要确保MySQL服务绑定到所有可用地址(默认可能仅绑定127.0.0.1,导致外部无法访问),同时检查宿主机3306端口是否被占用:

修改后的docker-compose.yml:

db-my-sql:
  image: mysql:latest
  container_name: mysql_db
  restart: always
  environment:
    MYSQL_DATABASE: "xyz"
    MYSQL_ROOT_PASSWORD: "root1234!"
  network_mode: "host"
  command: --bind-address=0.0.0.0

后续检查步骤

  1. 检查宿主机3306端口是否被其他服务占用:
    netstat -tulpn | grep 3306
    
    如果有占用,停止对应服务后再重启容器。
  2. 重启容器:docker-compose up -d
  3. 本地通过localhost:3306连接MySQL:
    mysql -h localhost -u root -proot1234!
    

额外排查步骤

如果仍无法连接,查看容器日志确认MySQL启动状态:

docker logs mysql_db

检查日志中是否有绑定地址失败、权限错误等信息,针对性调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:55:20