1. MySQL 容器部署详解

MySQL 采用客户端-服务端架构,其中服务端运行在容器中,客户端用于访问数据库。

我们将部署流程分为以下三部分:

1.1 MySQL 服务端部署

我们可以使用官方镜像来部署 MySQL 容器。建议使用 latest 标签,除非你有特定版本需求。

✅ 推荐步骤:

  • 使用 docker pull 拉取镜像:

    docker pull mysql:latest
    
  • 启动容器并设置 root 用户密码:

    docker run --name bael-mysql-demo -e MYSQL_ROOT_PASSWORD=baeldung -d mysql:latest
    
  • 查看运行中的容器:

    docker ps
    

输出示例:

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                 NAMES
fedf880ce2b6   mysql:latest   "docker-entrypoint.s…"   17 seconds ago   Up 16 seconds   3306/tcp, 33060/tcp   bael-mysql-demo

1.2 MySQL 客户端安装

在宿主机或其他机器上安装 MySQL 客户端,用于连接容器中的数据库:

  • 安装命令(以 Ubuntu 为例):

    sudo apt install mysql-client -y
    
  • 查看安装路径和版本:

    which mysql
    mysql --version
    

输出示例:

/usr/bin/mysql
mysql  Ver 14.14 Distrib 5.7.37, for Linux (x86_64) using  EditLine wrapper

1.3 建立连接

直接使用 mysql -u root -p 登录会报错:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

⚠️ 错误原因:MySQL 服务运行在容器内,而非宿主机上。因此不能使用默认的 socket 连接方式,而应使用 TCP 协议连接容器 IP。

✅ 正确连接方式:

  • 获取容器 IP 地址:
    docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' bael-mysql-demo
    

输出示例:

172.17.0.2
  • 使用 IP + 端口连接数据库:
    mysql -h 172.17.0.2 -P 3306 --protocol=tcp -u root -p
    

输入密码后成功进入 MySQL 命令行界面,可执行 SQL 命令,例如:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

2. 总结

本文详细介绍了如何在 Docker 环境中部署 MySQL 容器、安装客户端,并通过 TCP 协议连接数据库。关键点在于:

  • 容器中的 MySQL 服务与宿主机是隔离的
  • 不能使用默认 socket 连接方式
  • 必须通过容器 IP + 端口进行 TCP 连接

掌握这些内容后,你就可以顺利在容器环境中使用 MySQL 了。


原始标题:Docker Error: “Can’t Connect to Local MySQL Server Through Socket”