拉取镜像
docker pull mysql:8.0.20
复制代码
运行容器
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql:8.0.20
参数说明:
- --name 指定容器名称
- -e 设置环境变量,这里设置了mysql root用户的初始密码
- -d damon的缩写,指在后台运行
- -p 3306:3306,将容器内mysql的3306端口映射到宿主机的3306端口
如果容器密码忘记或者连接不上、可以看下面的教程
忘记mysql容器的root密码
首先进入容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8079fe557b0a mysql:8.0 "docker-entrypoint.s…" 3 minutes ago Exited (1) About a minute ago mysql8.0
#进入容器
docker exec -it 8079fe557b0a /bin/bash
下载vim编辑器(mysql镜像中默认没有安装vi或vi)
#更新apt
apt-get update
#安装vim
apt-get install vim
编辑mysql配置文件跳过密码
vim /etc/mysql/conf.d/docker.cnf
#如果保存的时候报错、则是没有这个docker.cnf文件
vim 的强制退出命令: qa!
#我的容器里只有:/etc/mysql这个文件目录,
#进入目录:
cd etc/mysql
#创建文件夹
mkdir conf.d
#进入conf.d文件夹
cd conf.d
#创建docker.cnf文件
touch docker.cnf
# vim编辑
vim docker.cnf
#配置跳过密码
在mysql配置文件中添加:skip-grant-tables
重启容器
docker restart 8079fe557b0a
重新进入容器
docker exec -it 8079fe557b0a /bin/bash
修改密码
mysql -u root -p
Enter password: # 不用输入密码直接回车enter
mysql> use mysql;
mysql> update user set authentication_string='' where user="root";
# 如果需要给root用户设置密码
mysql> update user set plugin='mysql_native_password' where user='root'; #更改加密方式
mysql> alter user 'root'@'localhost' IDENTIFIED BY 'youPassword';#设置密码
mysql> FLUSH PRIVILEGES;
# 退出数据库
mysql> exit
删除配置,重启服务
vim /etc/mysql/conf.d/docker.cnf
删除: skip-grant-tables
# 退出容器
docker restart 8079fe557b0a
报错:not allowed to connect to this MySQL server
(针对以下错误: null, message from server: "Host '172.18.0.1' is not allowed to connect to this MySQL server" n)
修改用户权限
mysql> use mysql;
mysql> update user set host= '%' WHERE user = 'root';
Query OK, 1 row affected (0.03 sec)
#刷新权限到内存
mysql> flush privileges;