发布于 

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
2
3
4
5
6
vim /etc/docker/daemon.json

#我的现在是这样
{
"registry-mirrors": ["https://z******w.mirror.aliyuncs.com"]
}

加入数据目录配置,配置完之后是这样。

1
2
3
4
{
"registry-mirrors": ["https://z******w.mirror.aliyuncs.com"],
"data-root": "/data/docker"
}

如果是首次编辑,那么应该是这样。

1
2
3
{
"data-root": "/data/docker"
}

配置完成后,启动 docker 服务。

1
systemctl start docker

查看镜像和容器信息,很遗憾,还是空的!

继续按照网上教程,使用 docker info 命令查看信息,看到 Docker Root Dir: /var/lib/docker,说明目录配置没有生效。

继续折腾。

1
2
3
4
ps aux | grep dockerd

root 1397119 0.0 4.3 1376552 76768 ? Ssl 14:21 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 1400303 0.0 0.0 15456 1092 pts/0 R+ 14:25 0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn --exclude-dir=.idea --exclude-dir=.tox dockerd

把 dockerd 进程杀了。

1
kill -9 1397119

等待一会儿,等待进程重启,此时再执行 docker info ,看到 Docker Root Dir: /data/docker

执行 docker ps -adocker images 也是能看到容器和镜像了。

值得一提的是,在我迁移之前,也就是我的 docker 被重装之后,我跑了一个 Lsky 的容器。

同时 /data/docker 下有着我以前的容器(重装之前的容器),数据迁移完成之后,所有这些容器(Lsky + 以前的容器)都成功展示了出来,数据成功合并了,并没有丢失。

但是镜像信息似乎有点异常,只有我新拉的镜像信息是正常的,而以前的都是 none,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
halcyonazure/lsky-pro-docker latest 2768d6b415c7 47 hours ago 660MB
<none> <none> 6d5b21f9fc5f 7 months ago 56.8MB
<none> <none> 7484689f290f 12 months ago 538MB
<none> <none> e188ce21946a 13 months ago 675MB
<none> <none> 5dba8012c96f 23 months ago 148MB
<none> <none> 2dd91ce2efe1 23 months ago 508MB
<none> <none> dfda7a2cf273 2 years ago 693MB
<none> <none> feb5d9fea6a5 2 years ago 13.3kB
<none> <none> e9c354083de7 4 years ago 373MB
<none> <none> de764ad211de 4 years ago 443MB
<none> <none> 3e581a516dcd 4 years ago 890MB
<none> <none> 0efa6a3de177 4 years ago 861MB
<none> <none> 3f43f72cb283 4 years ago 510MB

不过好在容器都运行正常,镜像我就不管那么多了。

到此就算迁移成功,可以把无用的目录删除了。

1
2
rm -rf /var/lib/docker
rm -rf /var/lib/docker.bak