赞
踩
起因是因为我在使用docker创建自定义的镜像时遇到了爆内存的情况,迫不得已我需要重启docker服务并且强制停止所有容器,然后重启docker服务并且需要手动重启里面的容器。
在我start
mysql容器的时候遇到了bug:启动mysql容器后秒退关闭了
输入docker ps -a
查看情况
发现异常关闭了
输入docker logs f39859b3373a
查看日志
只查看后面n行输入docker logs -t --tail=n [容器id]
发现是mysqld
报错了,无法识别default-character-set=utf8
,突然想起是几天前改过配置文件,应该是因为这个导致无法正常启动。
但是我又没法启动mysql容器改配置并且也没有使用挂载功能连接外部Linux,这很难办,获取docker容器在外部机的存储位置不是一件简单的事。
查阅资料发现可以使用docker cp
命令拷贝容器里面的数据,提前找清楚容器内部的文件路径就好了。
我之前修改的配置路径在容器的\etc\mysql\my.cnf
,
使用
docker inspect -f '{{.ID}}' f39859b3373a
查出容器的长ID:f39859b3373a7edc2b22a534caca4239b41661448799ec4bfaabe4aef21ec845
使用docker cp
docker cp f39859b3373a7edc2b22a534caca4239b41661448799ec4bfaabe4aef21ec845:/etc/mysql/my.cnf /home/luo/
拷贝my.cnf
到外部linux的/home/luo/
目录下,
编辑完后重新上传到Linux上,然后重新传回mysql容器中
docker cp /home/luo/my.cnf f39859b3373a7edc2b22a534caca4239b41661448799ec4bfaabe4aef21ec845:/etc/mysql/
最后重新启动mysql容器,可以正常启动了。
至于表的数据,存放在docker容器里的/var/lib/mysql/
下,需要的话可以拷贝出来保存到外部虚拟机。
最后还是推荐使用挂载的方式创建容器方便数据的传输存储:Docker mysql 把数据存储在本地目录
其他参考资料:
Docker 从容器中拷贝文件到宿主机中
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。