一条命令即可运行可远程连接的MySQL容器:docker run -d --name mysql-dev -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 --restart=always -v /data/mysql:/var/lib/mysql mysql:8.0,需注意用户授权、配置挂载路径及数据卷权限。

直接拉起一个可连的 MySQL 容器
不需要构建镜像、不用改配置文件,docker run 一条命令就能跑起来一个带密码、可远程连接的 MySQL 实例,适合开发/测试快速验证。
- 默认 root 密码通过
-e MYSQL_ROOT_PASSWORD=123456设置,不设会启动失败 -
端口映射必须显式声明:
-p 3306:3306,否则容器内服务无法从宿主机访问 - 加
--restart=always避免 Docker 重启后服务掉线 - 首次运行会自动初始化数据目录,后续重启复用卷内容,不会重置密码或清库
docker run -d \ --name mysql-dev \ -e MYSQL_ROOT_PASSWORD=123456 \ -p 3306:3306 \ --restart=always \ -v /data/mysql:/var/lib/mysql \ -d mysql:8.0
连接被拒绝?检查 bind-address 和用户权限
容器内 MySQL 默认只监听 127.0.0.1,即使端口映射了,外部客户端也会报 Connection refused 或 Access denied for user。
- MySQL 8.0+ 默认创建的
root@localhost用户不能远程登录,必须额外授权root@'%' - 启动时加
-e MYSQL_ROOT_HOST='%'可让初始化脚本自动创建通配符主机用户(仅限 8.0.13+) - 若已启动,进容器执行
mysql -uroot -p123456 -e "CREATE USER 'root'@'%' IDENTIFIED BY '123456'; GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;" - 无需修改
my.cnf中的bind-address—— Docker 容器默认用0.0.0.0监听,问题几乎全出在用户权限上
挂载配置文件导致启动失败的常见原因
想自定义 max_connections 或 character_set_server?别直接挂载整个 /etc/mysql/my.cnf,MySQL 容器启动逻辑对配置路径很敏感。
- 官方镜像只认
/etc/mysql/conf.d/*.cnf和/etc/mysql/mysql.conf.d/*.cnf下的文件 - 挂载单个配置文件时,路径必须是
/etc/mysql/conf.d/custom.cnf,且文件需有 Unix 换行符(Windows 编辑保存易出错) - 配置项写错格式(如漏掉
[mysqld]段)会导致容器立即退出,docker logs mysql-dev里会显示unknown variable或parse error - 字符集相关配置(如
collation-server=utf8mb4_unicode_ci)必须和init_connect配合,否则客户端连接后仍可能用错编码
[mysqld] max_connections = 200 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect = 'SET NAMES utf8mb4'
数据卷权限错误:container_linux.go:349: starting container process caused: chdir to cwd...no such file or directory
这个错误不是路径不存在,而是宿主机挂载点(如 /data/mysql)权限不足,MySQL 进程(uid=999)无法写入。
- 不要用
chmod 777 /data/mysql—— MySQL 容器启动时会校验目录属主,非mysql:mysql(即 uid=999)会拒绝启动 - 正确做法:宿主机上执行
sudo chown -R 999:999 /data/mysql(注意是数字 uid,不是用户名) - 如果用 Docker Compose,可在 service 下加
user: "999:999"显式指定运行身份,避免依赖挂载点权限 - 首次初始化后,目录里会出现
ibdata1、mysql等子目录,此时再改权限也无效,必须清空重来
Docker 里跑 MySQL 最容易卡在权限、用户授权、配置加载顺序这三处,问题现象相似但根因不同,查日志前先确认这三项是否都对得上。










