当我运行docker时,已下载的docker图像(似乎是)存储在/var/lib/docker
某处。
由于该目录的磁盘空间有限,我一次配置Docker到多台机器;有没有办法将此默认位置更改为/mnt/hugedrive/docker/
?
答案 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时遗留的残留数据的风险。我已经使用了以下链接中定义的一些步骤,这些步骤归功于他们:
How To: Linux Hard Disk Encryption With LUKS [ cryptsetup Command ]
另外,作为另一个要点:覆盖动态数据'数据状态,我正在使用Free Let's Encrypt
答案 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: -
停止Docker
# systemctl stop docker # systemctl daemon-reload
将以下参数添加到/lib/systemd/system/docker.service。
FROM: ExecStart=/usr/bin/dockerd TO: ExecStart=/usr/bin/docker daemon -g /mnt/hugedrive/docker/
创建一个新目录并将当前docker数据rsync到新目录。
# mkdir /mnt/hugedrive/docker/ # rsync -aqxP /var/lib/docker/ /mnt/hugedrive/docker/
现在,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