此问题已在此处有答案:
How to change the docker image installation directory?(20个回答)
两年前关闭。
当我运行docker时,下载的docker镜像(似乎)存储在/var/lib/docker
中的某个地方。
由于这个目录的磁盘空间有限,我一次为多台机器提供docker;是否有办法将此默认位置更改为/mnt/hugedrive/docker/
?
此问题已在此处有答案:
How to change the docker image installation directory?(20个回答)
两年前关闭。
当我运行docker时,下载的docker镜像(似乎)存储在/var/lib/docker
中的某个地方。
由于这个目录的磁盘空间有限,我一次为多台机器提供docker;是否有办法将此默认位置更改为/mnt/hugedrive/docker/
?
5条答案
按热度按时间xpszyzbs1#
Docker v18.03起的工作方案
我发现@Alfabravo的评论在我的情况下起作用,所以归功于他们并投了赞成票。
然而,我认为在这里提供一个答案来详细说明它会增加价值:
确保docker已停止(或未在第一时间启动,例如(如果你刚刚安装)
(e.g.作为
root
用户):(or你可以
sudo systemctl stop docker
如果不是root但你的用户是一个sudo
-er,即.属于sudo
组)默认情况下,
daemon.json
文件不存在,因为它是 optional -它是 added 以覆盖默认值。(参考-参见Answer to: Where's docker's deamon.json? (missing))所以新安装的docker和那些从未修改过它的安装程序不会有它,所以创建它:
并添加以下内容来告诉docker将其所有文件放在此文件夹中,例如:
保存。
更新了其他评论者的注解以供考虑(我还没有尝试过这些,但感谢他们的输入,如果您正在进行故障排除,请考虑这些):
graph
选项在v17.05.0中不建议使用。使用data-root
代替。”-如何更改默认的docker容器位置?我还没有尝试过这个自己,但会更新的答案时,我有--data-root
标志工作正常。你不需要把json放在那里。json方法是支持的,但是我得到了一个错误,即data-root已经被指定,所以我删除了json。文件现在在新位置创建。”- comment -如何更改默认的docker容器位置?现在启动docker:
systemctl start docker
(if
root
或前缀为sudo
的其他用户。)你会发现docker现在已经把所有的文件放在了新的位置,在我的例子中,在下面:
/mnt/cryptfs/docker
.来自@Alfabravo的这个答案也得到了以下方面的支持:This answer to this problem: Docker daemon flags ignored
关于Docker版本控制的注意事项和想法
我运行Docker的主机平台是Ubuntu Linux 16.04.4 LTS 64 bit。
因此,我认为这个解决方案将适用于以后的Docker版本,以及当前编写的版本v18.03。换句话说:“此解决方案应该从v18.03开始工作”。与其他答案一样,如果Docker开发人员决定改变这方面的事情,这个答案也有可能不适用于Docker的未来版本。但就目前而言,它与v18. 03一起工作,至少在我的情况下,我希望你也发现它为你工作。
可选客房清洁提示:
如果你有文件在原始位置
/var/lib/docker
* 和 * 你知道你肯定 * 不 * 需要他们了(即)。如果你有所有的数据(数据库内的容器,文件等)在他们备份或以另一种形式),你可以删除它们,以保持你的机器整洁。什么没有工作-其他答案在这里(不幸的是):
这里的其他解决方案不适用于我的情况 * 对于我使用的当前版本的docker *(在撰写本文时,当前的docker版本是:Docker v18.03(当前))。
还要注意(正如@AlfaBravo在他们对我的回答的评论中正确指出的那样),其他答案可能适用于不同或更早版本的docker。
我应该注意我的主机平台是Ubuntu Linux 16.04.4 LTS 64 bit。
在所有情况下,当尝试其他答案时,我都遵循了在执行解决方案之前停止docker的过程,然后根据需要启动它。:
/lib/systemd/system/docker.service
的解决方案-将行修改为:ExecStart=/usr/bin/docker daemon -g /mnt/hugedrive/docker/
-我的结果:docker仍然将其文件放在默认的原始位置:/var/lib/docker
/etc/systemd/system/docker.service.d/exec_start.conf. docker.service
/var/lib/docker
。(当然,我要感谢他们的努力)。
为什么要更改默认的docker位置:用于GDPR的加密文件系统:
顺便说一句,也许对你有用,我正在加密文件系统中运行docker(作为GDPR计划的一部分),以提供静态数据状态加密(也称为静态加密)和使用中的数据(definitions)。
定义GDPR数据Map的过程包括查看存储敏感数据的系统(Reference 1: GDPR Data Map Template: An easy to use self-assessment tool for understanding how data moves through your organisation)(Reference 2: Data mapping: Where to start for GDPR compliance)。并且通过加密存储数据库和应用程序代码的文件系统以及交换文件,可以消除删除或移动VM时留下残留数据的风险。
我已经使用了以下链接中定义的一些步骤,归功于他们:
我想指出的是,建议进一步加密:加密数据库字段本身-至少是敏感字段-即用户数据。您可能会在流行的数据库系统的实现中找到对此的各种级别的支持。字段加密在Web应用程序运行时提供对恶意入侵和数据泄漏的防御。
另外,作为另一个侧面:为了涵盖数据的“动态数据”状态,我使用免费的Let's Encrypt
uujelgoq2#
最好的解决方案是使用正确的数据根路径启动docker守护进程(
dockerd
)。根据官方文档,截至2019年2月,没有--graph
,-g
选项。这些被重命名为单个参数--data-root
。https://docs.docker.com/engine/reference/commandline/dockerd/
因此,您应该修改
/lib/systemd/system/docker.service
,以便ExecStart
考虑该参数一个例子可能是
然后你应该重启你的docker守护进程。(请记住,您将不再拥有您的容器和图像,如果您想保留所有内容,请将数据从旧文件夹复制到新文件夹)
请记住,如果您重新启动docker守护进程,您的容器将停止,并且只有具有正确重启策略的容器才会重新启动。
在Ubuntu 16.04.5 Docker版本18.09.1,build 4c52b90上测试
pkwftd7m3#
您可以使用
-g
选项和您选择的目录启动Docker守护程序。这将为Docker设置适当的运行时。在1.8版本中,它应该是这样的:
在早期版本中,它将是:
从man page:
x4shl7ld4#
您可以执行以下步骤来修改默认的docker镜像位置,即/var/lib/docker:-
1.停止Docker
1.将以下参数添加到/lib/systemd/system/docker. service。
1.创建一个新目录,并将当前docker数据同步到新目录。
1.现在,Docker Daemon可以安全启动了
q5iwbnjs5#
在**/etc/default/docker**或系统中的任何位置,将以下内容更改为如下内容:
如果您遇到问题并且被忽略,请应用此解决方案:Docker Opts in Etc Default Docker Ignored