用 Docker 运行 MySQL 是最轻量、可复现的本地或测试环境搭建方式,核心是一条 docker run 命令配合挂载和参数;支持持久化、远程连接、自定义配置及常见问题处理。

直接用 Docker 运行 MySQL 是最轻量、可复现的本地或测试环境搭建方式。核心就是一条 docker run 命令,配合少量挂载和参数即可完成部署。
基础命令:一键启动 MySQL 容器
执行以下命令即可拉取官方镜像并启动一个带持久化、可远程连接的 MySQL 8.0 容器:
docker run -d \--name mysql8 \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD=123456 \-v /mydata/mysql/conf:/etc/mysql/conf.d \-v /mydata/mysql/data:/var/lib/mysql \-v /mydata/mysql/logs:/var/log/mysql \-d mysql:8.0
说明:
-p 3306:3306 映射宿主机 3306 端口;
-e MYSQL_ROOT_PASSWORD 设置 root 密码(必须);
-v 三个挂载分别对应配置、数据、日志,确保容器重启后数据不丢失。
自定义配置:通过挂载 my.cnf 控制行为
在 /mydata/mysql/conf/ 下新建 custom.cnf,例如启用时区、调整字符集:
[mysqld] default-time-zone = '+08:00' character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci skip-character-set-client-handshake = true
Docker 启动时会自动加载该文件。注意:MySQL 8.0 默认使用 caching_sha2_password 插件,如需兼容老客户端,可在配置中加一行:default_authentication_plugin = mysql_native_password
连接与验证:确认服务可用
启动后检查状态:docker ps | grep mysql8
进入容器执行 SQL 验证:docker exec -it mysql8 mysql -uroot -p123456 -e "SELECT VERSION(), @@sql_mode;"
从宿主机用客户端(如 MySQL Workbench、DBeaver 或命令行)连接 127.0.0.1:3306,用户名 root,密码即启动时设置的值。
常见问题处理
-
容器启动失败报错“Address already in use”:检查宿主机 3306 是否被占用,或换端口(如
-p 3307:3306) -
首次连接提示“Access denied for user 'root'@'172.x.x.x'”:MySQL 8.0 默认只允许本地 socket 登录 root,需手动授权远程访问:
docker exec -it mysql8 mysql -uroot -p123456 -e "CREATE USER 'root'@'%' IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;" -
挂载目录权限不足导致启动失败:确保宿主机挂载路径(如
/mydata/mysql/data)属主为999:999(MySQL 容器默认用户 ID),可运行:sudo chown -R 999:999 /mydata/mysql










