当我运行docker时,下载的docker图像(似乎是)存储在/var/lib/docker某个地方.
由于此目录上的磁盘空间有限,我正在同时为多台机器配置docker; 有没有办法将此默认位置更改为ie /mnt/hugedrive/docker/?
the*_*now 64
从Docker v18.03开始的工作解决方案
我发现@ Alfabravo的评论在我的情况下工作,所以对他们有信心并且赞成.
但是我认为它增加了价值,在这里提供一个答案来详细说明:
确保停靠器停止(或者首先不启动,例如,如果您刚刚安装它)
(例如作为root用户):
systemctl stop docker
Run Code Online (Sandbox Code Playgroud)
(或者你可以,sudo systemctl stop docker如果不是root但你的用户是sudo-er,即属于该sudo组)
默认情况下,该daemon.json文件不存在,因为它是可选的 - 它被添加以覆盖默认值.(参考 - 请参阅答案:Docker的deamon.json在哪里?(缺失)
)
所以docker的新安装和那些从未修改它的设置都没有,所以创建它:
vi /etc/docker/daemon.json
Run Code Online (Sandbox Code Playgroud)
并添加以下内容告诉docker将其所有文件放在此文件夹中,例如:
{
"graph":"/mnt/cryptfs/docker"
}
Run Code Online (Sandbox Code Playgroud)
并保存.
现在启动docker:
graph
(如果是其他用户data-root,systemctl start docker则为if 或前缀.)
您会发现docker现在已将所有文件放在新位置,在我的情况下,位于:root.
来自@Alfabravo的答案也得到以下支持:这个问题的答案:Docker守护程序标志被忽略了
关于Docker版本控制的注意事项和想法
我运行docker的主机平台是Ubuntu Linux 16.04.4 LTS 64bit.
因此,我认为这个解决方案适用于Docker的后续版本,以及当前的写作时间,版本为v18.03.换句话说:"这个解决方案应该从v18.03开始工作".正如其他答案的情况似乎如此,如果Docker开发人员决定改变这方面的内容,那么这个答案可能对Docker的未来版本可能不起作用.但就目前而言,它适用于v18.03,至少在我的情况下,我希望你也发现它适合你.
可选的管家提示:
如果您在原始位置有文件,sudo 并且您知道自己肯定不再需要它们(即您拥有所有数据(容器,文件等内的数据库)备份或以其他形式),您可以删除它们,以保持您的机器整洁.
什么不起作用 - 其他答案在这里(不幸的是):
这里的其他解决方案对于我正在使用的当前版本的docker的情况不起作用(作为编写时,当前的docker版本是:Docker v18.03(当前)).
另请注意(正如@AlfaBravo在对我的回答的评论中正确指出的那样)其他答案可能适用于不同版本或早期版本的docker.
我应该注意我的主机平台是Ubuntu Linux 16.04.4 LTS 64bit.
在尝试其他答案的所有情况下,我都会在执行解决方案之前遵循停止docker的过程,然后根据需要在之后启动它.:
/sf/answers/3332340021/ - @ Gerald Sabu M改变的解决方案/mnt/cryptfs/docker- 改变行:/var/lib/docker- 结果对我来说:docker仍将其文件放在默认的原始位置:/lib/systemd/system/docker.service
我尝试了@Fai的评论,但是我的系统上不存在该文件,因此它们的设置是特别的:
ExecStart=/usr/bin/docker daemon -g
/mnt/hugedrive/docker/
我也尝试了@Hatem Jaber的答案
/sf/answers/2245042971/ - 但同样,@ Gerald Sabu M的回答,docker仍将文件放在原来的默认位置/var/lib/docker.
(我当然要感谢他们的努力).
为什么我要更改默认的docker位置:用于GDPR的加密文件系统:
顺便说一下,也许对你有用,我在加密文件系统中运行docker(作为GDPR计划的一部分),以便提供数据静态数据加密(也称为静态加密) )以及数据使用中的(定义).定义GDPR数据图 的过程包括查看存储敏感数据的系统(参考文献1:GDPR数据地图模板:易于使用的自我评估工具,用于了解数据如何在您的组织中移动)(参考文献2:数据映射:从哪里开始遵守GDPR).并且通过加密存储数据库和应用程序代码的文件系统以及交换文件,可以消除在删除或移动VM时遗留的残留数据的风险.我已经使用了以下链接中定义的一些步骤,相信它们:
另外,作为另一个要点:为了覆盖'动态数据'状态的数据,我正在使用Free Let的加密
Dha*_*mit 17
您可以使用-g选项和您选择的目录启动Docker守护程序.这为Docker设置了适当的运行时.
对于1.8版,它应该是这样的:
docker daemon -g /path/to/directory
Run Code Online (Sandbox Code Playgroud)
对于早期版本,它将是:
docker -d -g /path/to/directory
Run Code Online (Sandbox Code Playgroud)
从手册页:
-g, --graph=""
Path to use as the root of the Docker runtime. Default is /var/lib/docker.
Run Code Online (Sandbox Code Playgroud)
Jer*_*u M 12
您可以执行以下步骤来修改默认的docker镜像位置,即/ var/lib/docker: -
停止Docker
Run Code Online (Sandbox Code Playgroud)# systemctl stop docker # systemctl daemon-reload
将以下参数添加到/lib/systemd/system/docker.service.
Run Code Online (Sandbox Code Playgroud)FROM: ExecStart=/usr/bin/dockerd TO: ExecStart=/usr/bin/docker daemon -g /mnt/hugedrive/docker/
创建一个新目录并将当前docker数据rsync到新目录.
Run Code Online (Sandbox Code Playgroud)# mkdir /mnt/hugedrive/docker/ # rsync -aqxP /var/lib/docker/ /mnt/hugedrive/docker/
现在,Docker Daemon可以安全启动
Run Code Online (Sandbox Code Playgroud)# systemctl start docker
最好的解决方案是dockerd使用正确的数据根路径启动docker daemon()。根据官方文件,为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://
Run Code Online (Sandbox Code Playgroud)
然后,您应该重新启动docker守护程序。(请记住,您将不再拥有容器和图像,如果要维护所有内容,请将数据从旧文件夹复制到新文件夹)
service docker restart
Run Code Online (Sandbox Code Playgroud)
请记住,如果您重新启动docker守护程序,则您的容器将被停止,只有那些具有正确重启策略的容器才会被重新启动。
在Ubuntu 16.04.5 Docker 18.09.1版上测试,内部版本4c52b90
| 归档时间: |
|
| 查看次数: |
29244 次 |
| 最近记录: |