docker迁移数据目录并配置镜像加速
起因是想搭建一个 Lsky 图床,当时按照网上的教程,使用 docker-compose 搭建。
但是执行完 docker-compose up -d
后发现并没有启动成功,当时没有深究,去找别的方法搭建了。
但是后来发现,我的 docker 似乎被重装了,我之前的容器和镜像全都没了。
因为我之前迁移过 docker 数据目录,将其迁移到了 /data/docker
,而这次重装导致 docker 的数据目录又变成了默认的 /var/lib/docker
。
所以容器和镜像全都不见了。
其实是还在的,只是它们都在 /data/docker
下,而现在 docker 的默认目录是 /var/lib/docker
。
所以理论上重新迁移一次就好了。
说干就干。
需要先安装 rsync
,并提前创建好 docker 数据目录。
1 | yum install rsync -y |
我这里已经安装过了,并且数据目录打算就用 /data/docker
。
首先停止 docker 服务。
1 | systemctl stop docker |
开始迁移数据。
1 | rsync -aP /var/lib/docker/ /data/docker/ |
迁移完成后,把原来的目录先移走,这里我就直接重命名了。(保险起见,数据迁移成功之前千万不要直接删除!!!)
1 | mv /var/lib/docker /var/lib/docker.bak |
编辑 /etc/docker/daemon.json
,我配过镜像加速器,所以这个文件是存在的,如果不存在也不要紧,直接编辑即可。
1 | vim /etc/docker/daemon.json |
加入数据目录配置,配置完之后是这样。
1 | { |
如果是首次编辑,那么应该是这样。
1 | { |
配置完成后,启动 docker 服务。
1 | systemctl start docker |
查看镜像和容器信息,很遗憾,还是空的!
继续按照网上教程,使用 docker info
命令查看信息,看到 Docker Root Dir: /var/lib/docker
,说明目录配置没有生效。
继续折腾。
1 | ps aux | grep dockerd |
把 dockerd 进程杀了。
1 | kill -9 1397119 |
等待一会儿,等待进程重启,此时再执行 docker info
,看到 Docker Root Dir: /data/docker
。
执行 docker ps -a
,docker images
也是能看到容器和镜像了。
值得一提的是,在我迁移之前,也就是我的 docker 被重装之后,我跑了一个 Lsky 的容器。
同时 /data/docker
下有着我以前的容器(重装之前的容器),数据迁移完成之后,所有这些容器(Lsky + 以前的容器)都成功展示了出来,数据成功合并了,并没有丢失。
但是镜像信息似乎有点异常,只有我新拉的镜像信息是正常的,而以前的都是 none
,如下:
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
不过好在容器都运行正常,镜像我就不管那么多了。
到此就算迁移成功,可以把无用的目录删除了。
1 | rm -rf /var/lib/docker |