如何更改Docker镜像存储目录?

11 浏览
0 Comments

如何更改Docker镜像存储目录?

据我所知,docker镜像在被拉取时会被安装到/var/lib/docker目录下。是否有办法更改这个位置,比如将其更改为挂载的卷,比如/mnt

0
0 Comments

如何更改Docker镜像存储目录?

在下面的内容中,我们可以找到更改Docker镜像存储目录的原因和解决方法。

根据评论中的建议,我使用Docker systemd文档来改进这个回答。

以下步骤不需要重新启动,而且更加干净。

首先创建目录和文件以进行自定义配置:

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf

对于Docker版本17.06-ce之前,粘贴以下内容:

[Service]

ExecStart=

ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"

对于Docker版本17.06-ce之后,粘贴以下内容:

[Service]

ExecStart=

ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"

通过daemon.json的替代方法

我最近在Fedora 25上尝试了上述方法,似乎不起作用。而在/etc/docker/daemon.json中进行简单的修改可以解决问题:

{

"graph": "/mnt",

"storage-driver": "overlay"

}

无论使用哪种方法,都需要重新加载配置并重新启动Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

确认Docker已重新配置:

docker info|grep "loop file"

在最新版本(17.03)中,需要使用不同的命令:

docker info|grep "Docker Root Dir"

输出应该如下所示:

 Data loop file: /mnt/devicemapper/devicemapper/data
 Metadata loop file: /mnt/devicemapper/devicemapper/metadata

或者:

 Docker Root Dir: /mnt

然后,您可以安全地删除旧的Docker存储:

rm -rf /var/lib/docker

这是唯一在Ubuntu 16.04上对我有用的方法!

这个链接docs.docker.com/engine/admin/systemd解释了如何使用systemd配置Docker,适用于新的Linux发行版,如Ubuntu 16.04。

docker info语句可能已经过时。在Ubuntu 16.04上,检查是否重新配置的命令是sudo docker info | grep "Docker Root Dir"。否则,回答是正确的,应该被接受 😉

我刚刚在Debian Sid上测试了Docker 1.12.0,仍然有Data loop fileMetadata loop file。显然在Ubuntu上你有不同的版本。

它之前起作用了一段时间,但是从某个时候开始,在启动docker服务时出现错误:Error starting daemon: error initializing graphdriver: invalid argument(请参见github.com/docker/docker/issues/14026)。删除/etc/systemd/system/docker.service.d/docker-storage.conf后一切正常。可能的原因是我在此期间升级了内核。

确认工作日期:2017年5月26日,在Xubuntu 16.04 LTS上,Docker版本17.03.1-ce,构建c6d412e。

在Debian上,要编辑的文件似乎是/lib/systemd/system/docker.service(请参见linuxconfig.org/…)。

在新版本的Linux(4.10)和Docker(docker-ce 17.06)中,必须将行更改为以下内容:/usr/bin/dockerd -H fd:// --data-root="/mnt"

小心,如果您还在/etc/systemd/system/docker.service.d/中使用了docker.conf文件。

如果在运行docker info|grep "Docker Root Dir"时看到Docker Root Dir: /"/mnt",则必须在docker-storage.conf文件中将--data-root="/mnt"替换为--data-root=/mnt

请注意,新的存储位置不应该是NTFS分区,请参见here,如果您确实希望使用vfs驱动程序,请查看提到的线程。

对于19.03.12版本,位于Ubuntu 18.04.3 LTS上,可以在/etc/docker/daemon.json中使用上述方法。

0
0 Comments

如何更改Docker镜像存储目录?

近期的Docker版本中,您可以在/etc/docker/daemon.json中将data-root参数的值设置为自定义路径(参考https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file)。

在旧版本中,您可以在启动Docker守护进程时使用-g选项来更改Docker的存储基目录(容器和镜像所在的目录)(查看docker --help)。

您可以通过将其添加到/etc/default/docker来实现在Docker启动时自动应用此设置。

谢谢您的回答。您能告诉我如何在docker upstart文件中添加这个要求吗?我是否应该在DOCKER_OPTS变量中添加-g标志?

抱歉给您带来困惑,我指的就是那个文件。在'/etc/defaults/docker.io'中有一行'DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4"'。这是我应该使用的选项来设置图形目录,并添加-g标志吗?

是的,将此行更改为DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"

在Fedora中无效。如果您的发行版是Fedora,请参考我的答案

如果docker忽略了您的/etc/default/docker文件,您可能需要实施此解决方案(http://stackoverflow.com/questions/30127580),以解决某些版本的Debian或Ubuntu中的一个错误。

如果您只想更改此设置,请仅更改为:DOCKER_OPTS="-g /mnt",省略-dns参数

谢谢。这个方法很好用。但是当我下载新的镜像时,出现了这个错误:"failed to register layer: Untar re-exec error: exit status 1: output: link /bin/dnsdomainname /bin/domainname: operation not permitted" 有什么想法吗?

不建议在/etc/default/docker中设置此标志。在/etc/default/docker文件中有一条注释指向这个指南(https://docs.docker.com/v1.11/engine/reference/commandline/daemon/#daemon-configuration-file)。

-g选项在哪里有文档?我在dockerd的man页面上没有找到。

那是针对旧版Docker发布的 - 我最初的答案是在3年前写的 😉

在17.09.0-ce上仍然有效,但我还没有找到相关的文档。

对于后续的读者:这个解决方案适用于CentOS 7,使用docker-ce服务器版本19.3

我尝试了几种不同的方法,但编辑/etc/docker/daemon.json配置是最终为我工作的。这里有详细的说明:evodify.com/change-docker-storage-location

0
0 Comments

如何更改Docker镜像存储目录?

问题原因:新版本的Docker中,将graph标记废弃,需要使用data-root来指定镜像存储目录。

解决方法:编辑/etc/docker/daemon.json文件(如果不存在,则创建文件),并添加以下内容:

{

"data-root": "/new/path/to/docker-data"

}

然后使用以下命令重新启动Docker服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

此外,还可以参考以下链接中的详细步骤(包括数据的移动)来使用data-root进行Docker存储设置:

- Blog post

对于Windows操作系统,可以参考以下链接中的文章进行类似操作:

- Windows specific

其他用户的评论和回答:

- 一个用户在评论中提到了一个相关的链接:adriel.co.nz/blog/2018/01/25/…

- 另一个用户在评论中指出,该方法适用于最新版本的Docker。

- 一个用户在评论中提到,可以使用docker info|grep "Docker Root Dir"命令确认Docker是否已经使用新的存储目录。

- 一位用户在评论中表示,在Ubuntu 21.04上该方法适用。

- 最后一个用户提到,在更改后,原始目录/var/lib/docker仍然存在,可以安全地删除。

通过以上整理,我们可以得出如何更改Docker镜像存储目录的原因和解决方法。

0