- 拉取mysql5.7镜像
docker pull mysql:5.7
- 先创建一个临时的mysql,以便复制出my.cnf等数据,这条命令直接进入了docker临时容器
docker run --rm --name mysqlTemp -it -v /usr/local/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 /bin/bash
- 容器内拷贝配置文件,因为 /var/lib/mysql挂载了容器外目录/usr/local/mysql/,所以cp后文件会拷贝到/usr/local/mysql/下
cp /etc/mysql/my.cnf /var/lib/mysql
- 另启一个终端,查看拷贝出来的/usr/local/mysql/my.cnf文件。
如果是完整的mysql配置文件,直接跳到第8步。如果不是,继续向下看

- 这里的my.cnf文件不是完整的mysql配置,而是引用了其他目录下的。我们可以看到这里引用了二个目录,可以在第一个bash终端中ls查看这二个目录
/etc/mysql/conf.d/
/etc/mysql/mysql.conf.d/

- 同样把这二个目录拷贝到/var/lib/mysql下
cp -R /etc/mysql/conf.d/ /var/lib/mysql/conf.d
cp -R /etc/mysql/mysql.conf.d/ /var/lib/mysql/mysql.conf.d

- 退出bash,Docker中临时用的mysqlTemp会被删除
然后可以查看/usr/local/mysql/目录下有mysql所有的配置文件

- 创建正式的mysql容器,我这边是把/usr/local/mysql/下的全部拷贝到了 /data/mysql57/conf/目录了
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123455
-v /data/mysql57/data:/var/lib/mysql:rw
-v /data/mysql57/log:/var/log/mysql:rw
-v /data/mysql57/conf/my.cnf:/etc/mysql/my.cnf:rw
-v /data/mysql57/conf/conf.d:/etc/mysql/conf.d:rw
-v /data/mysql57/conf/mysql.conf.d:/etc/mysql/mysql.conf.d:rw
-v /data/mysql57/mysql-files:/var/lib/mysql-files:rw
-v /etc/localtime:/etc/localtime:ro
--name mysql57
--restart=always
-d mysql:5.7
--lower_case_table_names=1
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- 修改密码。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码xxx' WITH GRANT OPTION;
FLUSH PRIVILEGES;