Docker 下载使用MySQL
下载
docker pull mysql:5.7
-d 是用后台方式运行,mysql:5.7表示哪个镜像启动这个容器。
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/conf:/etc/mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
配置
第一步:修改文件my.cnf 编程utf8格式
vi /mydata/mysql/conf/my.cnf
文件内容
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
第二部:重启docker
docker restart mysql
mysql闪退
第一种情况换密码了
但是在我重启容器了之后却发现,使用docker ps命令后,并没有我刚刚重启的Mysql容器。
使用docker ps -a命令查看,可以看到Mysql容器几秒前退出了。也就是说,这个容器启动失败了。
然后我就使用docker logs [container ID]命令查看这个容器的运行日志,发现:提示了这么一条错误:
Access denied for user 'root'@'localhost' (using password: YES)
- 1
也就是说,这个docker容器的数据库默认密码错了。
然后我突然想起来,在我创建这个数据库docker容器的时候,确实有把数据库localhost的root密码修改过,但是同时没有修改这个容器的默认配置。
这就是为什么docker restart [container ID]命令无法重新启动mysql容器的原因了。(当然还有其他各种的原因,但大多都是配置方面的错误)
解决方法:
cd 到 /var/lib/docker/containers/目录下,这个目录就是docker容器的目录。
对于每一个容器,都有一个唯一的容器ID,我的是c9e55df1b121,然后我就可以在containers目录下找到以这个ID开头的文件夹:c9e55df1b121377fea6fc1b1cd6e79443d1b97aab50dc013dfa27b1002e76e14
进入这个目录,就可以看到有一个config.v2.json文件,这个文件就是该容器的配置文件。
打开这个文件就会看到以json形式存储的配置信息,然后在其中找到:MYSQL_ROOT_PASSWORD,这个密码应该就是老密码了。将这个老密码修改为正确的密码,保存即可。
注意:保存时,一定要确保docker没有在运行,即使用systemctl stop docker命令将docker关闭,否则保存后,docker仍然会依照老密码启动容器,容器仍然不能启动。
第二种情况自己配置文件写错了,这种最fuck
原来第一句话的配置文件写错了