如何将 Docker 容器的镜像移动到持久磁盘?

29
我们注意到容器占据了很多空间,其中一个原因是镜像。
我们希望搬移镜像。
目前我知道,它们存储在/var/lib/docker/graph/<id>/layer
是否有办法将这些镜像移到另一个位置或永久磁盘上?

2
如果您发现某个回答有用,请标记为绿色;-) - Luca G. Soave
4个回答

30

将图片移动到另一个驱动器或服务器:

docker save image_name > image_name.tar

mv image_name.tar /somewhere/else/

将其重新加载到 Docker 中

docker load < image_name.tar 

参考文献


1
当您重新加载图像时,它是否会占用您的磁盘空间,因此您必须再次移动它? - Chris Claude

21

这里有一个简单的方法来移动Docker的数据:

sudo service docker stop
sudo mv /var/lib/docker /a/new/location
sudo ln -s /a/new/location /var/lib/docker # Create a symbolic link
sudo service docker start

不需要更改DOCKER_OPTS或使用-g /path


17

您可以将 /var/lib/docker 挂载到另一个磁盘上,或者使用 -g /path 启动守护程序来告诉 Docker 使用不同的目录进行存储。


5

使用@creack的答案,我在Ubuntu上执行了以下操作,将整个docker镜像/容器文件夹移动到新位置/磁盘。这样做的好处是,安装任何新的镜像时都会使用新的磁盘位置。

首先停止docker服务:

sudo service docker stop

然后将Docker文件夹从默认位置移动到您的目标位置:

sudo mv /var/lib/docker /thenewlocation

然后编辑/etc/default/docker文件,插入/修改以下行,将新位置作为docker服务的参数提供:

DOCKER_OPTS="-g /thenewlocation/docker"

重启Docker服务:
sudo service docker start

这对我来说完全有效 - 所有我的图片都保持不变。


似乎不起作用:我按照答案添加了位置,但每当我重新启动docker时,它都会重新创建/var/lib/docker。当我执行ps aux | grep docker时,我发现该进程没有在配置文件中添加的-g /foo参数。 - Hi-Angel
所以,我确认-g选项有效。将-g /foo插入到docker.service文件中对我来说是有效的。但这不是一个好的选择,因为更新可能会覆盖该文件。 - Hi-Angel
好的,我找到了:你需要创建一个文件/etc/docker/daemon.json,文件内容为{ "data-root": "/my/path" },然后重新启动docker。虽然你在 ps aux中看不到任何更改,但是docker确实会以这种方式使用/my/path,如果之前删除了旧的/var/lib/docker,则不会被重新创建。 - Hi-Angel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接