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

将MySQL从Ubuntu服务器迁移至Docker后无法通过Socket连接求助

问题分析与解决建议

1. 本地MySQL客户端连接Docker容器失败的原因与解决

你遇到的ERROR 2002是因为主机上的mysql客户端默认尝试通过Unix socket文件(/var/run/mysqld/mysqld.sock)连接本地MySQL服务,但Docker容器内的MySQL socket文件仅存在于容器内部,主机系统无法直接访问。

解决方法:强制使用TCP/IP连接

执行连接命令时,指定-h 127.0.0.1参数,强制客户端通过TCP端口连接容器内的MySQL:

mysql -h 127.0.0.1 -u root -p
  • 无需额外添加sudo,除非你的mysql客户端有特殊权限限制;若必须使用sudo,同样要带上-h参数。

可选:通过Socket映射连接(进阶)

如果偏好使用socket连接,可在docker-compose.yml的volumes中添加socket映射:

volumes:
  - './volumes/mysql/data:/var/lib/mysql'
  - './volumes/mysql/my.cnf:/etc/mysql/conf.d/my.cnf'
  - './volumes/mysql/sql:/docker-entrypoint-initdb.d'
  - '/var/run/mysqld/mysqld-docker.sock:/var/run/mysqld/mysqld.sock' # 新增socket映射

重启容器后,使用以下命令连接:

mysql -u root -p --socket=/var/run/mysqld/mysqld-docker.sock

注意:不要直接映射到原生MySQL的socket路径(/var/run/mysqld/mysqld.sock),避免文件冲突。

2. WordPress无法连接Docker MySQL的排查步骤

(1)确认数据库连接配置

  • 若WordPress部署在主机系统上:数据库主机必须填127.0.0.1(不能用localhost,否则WordPress会默认尝试socket连接),端口填3306,用户名和密码对应你创建的授权用户。
  • 若WordPress也部署在Docker容器中:确保两者处于同一个Docker网络,数据库主机可直接填容器名mysql-database(内部网络可直接通信,无需依赖端口映射)。

(2)检查数据库用户的访问权限

确保你创建的WordPress数据库用户允许从指定IP访问:

-- 创建允许任意IP访问的用户(适合测试或WordPress在主机/其他容器场景)
CREATE USER 'wp_user'@'%' IDENTIFIED BY 'your_password';
-- 授予WordPress数据库的全部权限
GRANT ALL PRIVILEGES ON your_wp_db.* TO 'wp_user'@'%';
-- 刷新权限使配置生效
FLUSH PRIVILEGES;

若需限制特定IP,将%替换为WordPress所在的IP(比如172.17.0.1是Docker主机的默认内部IP)。

(3)验证端口与网络连通性

  • 在主机上执行telnet 127.0.0.1 3306或nc -zv 127.0.0.1 3306,确认3306端口可正常访问。
  • 检查Ubuntu的UFW防火墙:若防火墙处于开启状态,需允许3306端口的入站流量:sudo ufw allow 3306/tcp。

3. 原生MySQL与Docker MySQL的核心区别

  • 原生MySQL:直接运行在主机系统,socket文件、数据目录均位于主机本地路径,客户端默认通过socket连接。
  • Docker MySQL:运行在隔离的容器环境中,所有文件(包括socket、数据)默认仅在容器内部可见,必须通过端口映射或volume映射才能让主机访问。
  • 即使停止了原生MySQL,主机的mysql客户端依然会默认寻找原生的socket路径,因此必须显式指定TCP连接或自定义socket路径,才能连接Docker容器内的MySQL。

额外检查:Docker Compose配置完整性

你提供的command参数末尾有--collatio$,明显是粘贴时被截断,建议补全完整的排序规则配置,例如:

command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

不完整的参数可能导致容器内部MySQL服务存在潜在问题,影响连接稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:47:48