如何在 Docker 中快速部署和使用 MySQL 数据库
在 Docker 中使用 MySQL 是目前很流行的本地开发测试方案,能够避免本地环境依赖冲突,快速启动和销毁数据库实例,同时支持灵活的自定义配置。下面我们一步步介绍完整的操作流程。

拉取 MySQL 官方镜像
首先需要从 Docker Hub 拉取官方的 MySQL 镜像,默认会拉取最新版本的镜像,也可以指定具体的版本标签。执行以下命令:
# 拉取最新版 MySQL 镜像 docker pull mysql # 拉取指定版本,比如 8.0 版本 docker pull mysql:8.0
启动 MySQL 容器
拉取镜像完成后,就可以通过 docker run 命令启动 MySQL 容器,需要配置必要的环境变量和端口映射,以下是基础启动命令:
docker run -d \ --name mysql-test \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:8.0
命令参数说明:
- -d:后台运行容器
- --name:指定容器名称为 mysql-test
- -p 3306:3306:将宿主机的 3306 端口映射到容器的 3306 端口,方便外部连接
- -e MYSQL_ROOT_PASSWORD:设置 MySQL root 用户的密码,这是必填参数
- 最后的
mysql:8.0是指定使用的镜像
配置数据持久化
默认情况下容器删除后,MySQL 中存储的数据也会丢失,如果需要持久化数据,需要挂载宿主机的目录到容器的数据目录。修改启动命令如下:
docker run -d \ --name mysql-test \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /opt/mysql/data:/var/lib/mysql \ mysql:8.0
其中 -v /opt/mysql/data:/var/lib/mysql 表示将宿主机的 /opt/mysql/data 目录挂载到容器的 /var/lib/mysql 目录,MySQL 的所有数据都会存储到宿主机的该目录下,即使容器删除,数据也不会丢失。
连接 MySQL 容器
容器内连接
可以直接进入容器内部,使用 MySQL 客户端连接数据库:
# 进入容器 docker exec -it mysql-test bash # 容器内连接 MySQL mysql -u root -p # 输入之前设置的密码 123456 即可登录
宿主机连接
如果宿主机安装了 MySQL 客户端,可以直接连接映射的 3306 端口:
mysql -h 127.0.0.1 -P 3306 -u root -p
自定义配置文件
如果需要自定义 MySQL 的配置,比如修改字符集、最大连接数等,可以挂载自定义配置文件到容器的 /etc/mysql/conf.d 目录:
首先在宿主机创建配置文件 /opt/mysql/conf/my.cnf,内容如下:
[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_general_ci max_connections=200
然后修改启动命令,添加配置文件挂载:
docker run -d \ --name mysql-test \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /opt/mysql/data:/var/lib/mysql \ -v /opt/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \ mysql:8.0
常见操作
查看容器运行状态:
docker ps -a | grep mysql-test
停止容器:
docker stop mysql-test
启动已停止的容器:
docker start mysql-test
删除容器(需要先停止容器):
docker rm mysql-test
常见问题排查
如果启动容器后无法连接,可以先查看容器日志排查问题:
docker logs mysql-test
常见的问题包括密码设置不符合 MySQL 8.0 的密码策略、端口被占用、目录权限不足等。如果是目录权限问题,可以修改宿主机挂载目录的权限:
chmod 777 /opt/mysql/data