如何更改默认的docker容器位置?

时间:2015-08-18 10:40:00

标签: docker

当我运行docker时,已下载的docker图像(似乎是)存储在/var/lib/docker某处。

由于该目录的磁盘空间有限,我一次配置Docker到多台机器;有没有办法将此默认位置更改为/mnt/hugedrive/docker/

5 个答案:

答案 0 :(得分:47)

自Docker v18.03起的工作解决方案

我发现@ Alfabravo的comment可以在我的情况下工作,所以对他们有信心并且投了赞成票。

但是我觉得它增加了价值来提供一个答案来详细说明:

确保泊坞停止(或者首先没有启动,例如,如果您刚刚安装它)

(例如root用户):

systemctl stop docker

(或者你sudo systemctl stop docker如果不是root,但你的用户是sudo - 呃,即属于sudo

默认情况下,daemon.json文件不存在,因为它是可选 - 已添加以覆盖默认值。 (参考 - 见Answer to: Where's docker's deamon.json? (missing)

因此,新的docker和那些尚未修改过它的设置已经没有了,所以创建它:

vi /etc/docker/daemon.json

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

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

并保存。

现在启动docker:

systemctl start docker

(如果是其他用户,则为root或前缀为sudo。)

您会发现docker现在已将其所有文件放在新位置,就我而言,位于:/mnt/cryptfs/docker下。

@Alfabravo的回答也得到了This answer to this problem: Docker daemon flags ignored

的支持

关于Docker版本控制的注意事项和想法

运行docker的主机平台是Ubuntu Linux 16.04.4 LTS 64bit。

因此,我认为此解决方案适用于Docker的后续版本,以及当前的编写时间,版本18.03。换句话说:"此解决方案应该从v18.03开始工作"。正如其他答案的情况似乎如此,如果Docker开发人员决定改变这方面的内容,那么这个答案可能对Docker的未来版本可能不起作用。但就目前而言,它适用于v18.03,至少在我的情况下,我希望你也发现它适合你。

可选的管家提示:

如果您在原始位置/var/lib/docker 中有文件,那么您就知道自己已经不再需要它们了(即您拥有所有文件)备份或以其他形式备份数据(容器内的数据库,文件等),您可以删除它们,以保持机器整洁。

什么行不通 - 其他答案(不幸的是):

此处的其他解决方案对我的情况不适用于我正在使用的当前版本的docker (作为编写时,当前的docker版本是:Docker v18.03(当前))。

另请注意(正如@AlfaBravo在对我的回答的评论中正确指出的那样)其他答案可能适用于不同版本或更早版本的docker。

我应该注意我的主机平台是Ubuntu Linux 16.04.4 LTS 64bit。

在尝试其他答案的所有情况下,我都会在执行解决方案之前按照停止泊坞窗的过程,然后根据需要启动它。 :

  • https://stackoverflow.com/a/47604857/227926 - @Gerald Sabu M&#39 解决方案来改变/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

(我当然要感谢他们的努力)。

为什么我要更改默认的泊坞位置:用于GDPR的加密文件系统:

另外,也许对您有用,我在加密文件系统中运行docker(作为GDPR计划的一部分),以便提供数据静态数据加密(也称为(静态加密)和数据使用中)(definitions)。定义GDPR数据图的过程包括查看存储敏感数据的系统(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时遗留的残留数据的风险。我已经使用了以下链接中定义的一些步骤,这些步骤归功于他们:

答案 1 :(得分:14)

您可以使用-g选项和您选择的目录启动Docker守护程序。这为Docker设置了适当的运行时。

对于1.8版,应该是这样的:

docker daemon -g /path/to/directory

对于早期版本,它将是:

docker -d -g /path/to/directory

从手册页:

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

答案 2 :(得分:11)

您可以执行以下步骤来修改默认的泊坞窗图像位置,即/ var / lib / docker: -

  1. 停止Docker

    # systemctl stop docker
    # systemctl daemon-reload
    
  2. 将以下参数添加到/lib/systemd/system/docker.service。

    FROM:
    ExecStart=/usr/bin/dockerd
    TO:
    ExecStart=/usr/bin/docker daemon -g /mnt/hugedrive/docker/
    
  3. 创建一个新目录并将当前docker数据rsync到新目录。

    # mkdir /mnt/hugedrive/docker/
    # rsync -aqxP /var/lib/docker/ /mnt/hugedrive/docker/
    
  4. 现在,Docker Daemon可以安全启动

    # systemctl start docker
    

答案 3 :(得分:2)

/ 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

答案 4 :(得分:1)

最好的解决方案是使用正确的数据根路径启动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版本上测试,内部版本4c52b90