据我所知,当docker映像被拉出来时,它们被安装到/var/lib/docker中。是否有办法改变这个位置,比如到一个挂载的卷,比如/mnt?
当前回答
在最新版本的Docker中,你可以将data-root参数的值设置为自定义路径,在/etc/docker/daemon.json中 (根据https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file)。
在旧版本中,你可以在启动Docker守护进程时使用-goption改变Docker的存储基本目录(容器和映像所在的目录)。(查看docker—help)。 当Docker启动时,您可以通过将其添加到/etc/default/docker来自动应用此设置
其他回答
在Fedora 26和许多其他版本上,按照上面的描述移动基本文件夹位置后可能会遇到错误。如果你要把它移动到/home下面的某个地方,这一点尤其正确。这是因为SeLinux介入并阻止docker容器在这个位置下运行它的许多程序。
简单的解决方案是在添加-g参数时删除——enable-selinux选项。
在最新版本的Docker中,你可以将data-root参数的值设置为自定义路径,在/etc/docker/daemon.json中 (根据https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file)。
在旧版本中,你可以在启动Docker守护进程时使用-goption改变Docker的存储基本目录(容器和映像所在的目录)。(查看docker—help)。 当Docker启动时,您可以通过将其添加到/etc/default/docker来自动应用此设置
对于那些期待2020年的人。以下是针对Windows 10 Machine的:
在Hyper-V管理器的全局操作窗格中单击Hyper-V 设置… 下的“虚拟硬盘”更改位置 默认到您想要的位置。 在虚拟机下更改 从默认位置移到所需位置,然后单击应用。
单击“确定”关闭Hyper-V设置页面。
根据评论中的建议,我利用Docker systemd文档来改进这个答案。 下面的程序不需要重新启动,而且更简洁。
首先创建目录和文件进行自定义配置:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
对于17.06-ce之前的docker版本,请粘贴:
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"
对于17.06-ce后的docker,粘贴:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"
通过daemon.json的替代方法
我最近在Fedora 25上使用17.09-ce尝试了上述过程,但它似乎不起作用。而不是在/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
Or:
Docker Root Dir: /mnt
然后你可以安全地删除旧的Docker存储:
rm -rf /var/lib/docker
对于新的docker版本,我们需要使用data-root,因为graph在v17.05.0中已弃用:官方弃用文档
编辑/etc/docker/daemon.Json(如果它不存在,创建它),并包括:
{
"data-root": "/new/path/to/docker-data"
}
然后重新启动Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
更详细的一步一步的解释(包括移动数据)使用Docker存储与data-root可以在:博客文章中找到 在Windows的情况下,类似的帖子Windows特定
推荐文章
- 试图连接到https://index.docker.io时,网络超时
- 为每个Docker图像查找图层和图层大小
- 如何避免在为Python项目构建Docker映像时重新安装包?
- 如何用docker-compose更新现有图像?
- 如何在构建docker期间设置环境变量
- 拉访问拒绝存储库不存在或可能需要docker登录
- 如何在ENTRYPOINT数组中使用Docker环境变量?
- Docker:容器不断地重新启动
- Mac/OS X上的/var/lib/docker在哪里
- 如何用docker-compose标记docker图像
- 从环境文件中读入环境变量
- 禁用特定RUN命令的缓存
- 从Docker容器获取环境变量
- E: gnupg, gnupg2和gnupg1似乎没有安装,但是这个操作需要其中一个
- 如何从docker更改默认docker注册表。IO到我的私人注册表?