如何更改默认的docker容器位置?[副本]

t5fffqht  于 2023-05-22  发布在  Docker
关注(0)|答案(5)|浏览(158)

此问题已在此处有答案

How to change the docker image installation directory?(20个回答)
两年前关闭。
当我运行docker时,下载的docker镜像(似乎)存储在/var/lib/docker中的某个地方。
由于这个目录的磁盘空间有限,我一次为多台机器提供docker;是否有办法将此默认位置更改为/mnt/hugedrive/docker/

xpszyzbs

xpszyzbs1#

Docker v18.03起的工作方案

我发现@Alfabravo的评论在我的情况下起作用,所以归功于他们并投了赞成票。
然而,我认为在这里提供一个答案来详细说明它会增加价值:
确保docker已停止(或未在第一时间启动,例如(如果你刚刚安装)
(e.g.作为root用户):

systemctl stop docker

(or你可以sudo systemctl stop docker如果不是root但你的用户是一个sudo-er,即.属于sudo组)
默认情况下,daemon.json文件不存在,因为它是 optional -它是 added 以覆盖默认值。(参考-参见Answer to: Where's docker's deamon.json? (missing)
所以新安装的docker和那些从未修改过它的安装程序不会有它,所以创建它:

vi /etc/docker/daemon.json

并添加以下内容来告诉docker将其所有文件放在此文件夹中,例如:

{
  "graph":"/mnt/cryptfs/docker"
}

保存。
更新了其他评论者的注解以供考虑(我还没有尝试过这些,但感谢他们的输入,如果您正在进行故障排除,请考虑这些):

  • 根据stackoverflow用户Alireza Mohamadi在5月11日5:01在这个答案下面的评论:“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的过程,然后根据需要启动它。:

  • https://stackoverflow.com/a/47604857/227926- @Gerald Sabu M修改/lib/systemd/system/docker.service的解决方案-将行修改为:ExecStart=/usr/bin/docker daemon -g /mnt/hugedrive/docker/-我的结果:docker仍然将其文件放在默认的原始位置:/var/lib/docker
  • 我尝试了@Fai的评论,但该文件在我的系统上不存在,所以它将是他们设置的特定内容:/etc/systemd/system/docker.service.d/exec_start.conf. docker.service
  • 我还尝试了@Hatem Jaber的答案https://stackoverflow.com/a/32072042/227926-但同样,正如@Gerald Sabu M的答案一样,docker仍然将文件放在原始默认位置/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

uujelgoq

uujelgoq2#

最好的解决方案是使用正确的数据根路径启动docker守护进程(dockerd)。根据官方文档,截至2019年2月,没有--graph-g选项。这些被重命名为单个参数--data-root
https://docs.docker.com/engine/reference/commandline/dockerd/
因此,您应该修改/lib/systemd/system/docker.service,以便ExecStart考虑该参数
一个例子可能是

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

然后你应该重启你的docker守护进程。(请记住,您将不再拥有您的容器和图像,如果您想保留所有内容,请将数据从旧文件夹复制到新文件夹)

service docker restart

请记住,如果您重新启动docker守护进程,您的容器将停止,并且只有具有正确重启策略的容器才会重新启动。
在Ubuntu 16.04.5 Docker版本18.09.1,build 4c52b90上测试

pkwftd7m

pkwftd7m3#

您可以使用-g选项和您选择的目录启动Docker守护程序。这将为Docker设置适当的运行时。
在1.8版本中,它应该是这样的:

docker daemon -g /path/to/directory

在早期版本中,它将是:

docker -d -g /path/to/directory

从man page:

-g, --graph=""
     Path to use as the root of the Docker runtime. Default is /var/lib/docker.
x4shl7ld

x4shl7ld4#

您可以执行以下步骤来修改默认的docker镜像位置,即/var/lib/docker:-
1.停止Docker

# systemctl stop docker
# systemctl daemon-reload

1.将以下参数添加到/lib/systemd/system/docker. service。

FROM:
ExecStart=/usr/bin/dockerd
TO:
ExecStart=/usr/bin/docker daemon -g /mnt/hugedrive/docker/

1.创建一个新目录,并将当前docker数据同步到新目录。

# mkdir /mnt/hugedrive/docker/
# rsync -aqxP /var/lib/docker/ /mnt/hugedrive/docker/

1.现在,Docker Daemon可以安全启动了

# systemctl start docker
q5iwbnjs

q5iwbnjs5#

在**/etc/default/docker**或系统中的任何位置,将以下内容更改为如下内容:

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.8.4 -g /drive/location

如果您遇到问题并且被忽略,请应用此解决方案:Docker Opts in Etc Default Docker Ignored

相关问题