多人使用一台服务器,每个人新建一个docker,而docker默认挂载在根目录下,久而久之,根目录所在的磁盘就撑爆了。因此最好的方式或者说不得不做的方式就是修改docker挂载的磁盘。在此过程中踩了不少坑,提示一些需要注意的地方。一定要注意文件的备份,避免文件丢失
一开始参考的内容是博客 1,该博客提供三种方式。其中用软链接的方式即可。这主要是因为其余两种方式会涉及到修改配置文件/etc/docker/daemon.json
,根据2中介绍,配置文件中具体内容取决于具体的ubuntu版本或者kernel版本,来决定配置方式使用用data-root还是graph,因此不如使用软链接的方式直接有效,而且使用软链接的方式也配置成功,因此推荐软链接的方式。
首先,使用管理员权限
su
停止docker运行
systemctl stop docker
docker默认路径是 /var/lib/docker3,其中/var/lib文件夹的作用是存放应用程序运行时需要的数据,往往是持久性数据
在新目录下创建文件夹/data/docker/
使用同步命令将数据同步到文件夹下。
rsync -av --progress /var/lib/docker/* /data/docker/
这个步骤要格外注意,因为一不注意就会造成文件丢失。这里绝对不推荐使用mv命令。
首先,mv命令其实是cp+rm的组合,如果过程中存在传输中断的现象,会不清楚到底有没有文件丢失,与其使用mv,不如分解使用,先使用cp做好文件备份,然后使用rm删除文件。因此,mv的最佳用途是重命名文件;
其次,对于这种大文件传输,使用rsync配合–progress参数可以清楚看到文件的传输速度,对用户比较友好,还支持点断续传。
需要强调的是,对于数据迁移来说,一定要做好文件的备份安全工作。
后面建立软连接
ln -s /var/lib/docker /data/docker
之后,重启docker服务
systemctl start docker.service
如果出现# Job for docker.service failed because the control process exited with error code错误,通过执行命令journalctl -xe4,查看具体报错
验证是否迁移到新的目录
docker info | grep Docker
经以上步骤,应该可以成功。
如果是采用修改配置文件的方式,此处有一些提醒的地方。
配置文件为/etc/docker/daemon.json
,其中/etc文件夹是存放linux配置文件的地方
修改完配置文件后,需要执行
systemctl daemon-reload
然后执行重启docker命令。
如果 出现
failed to start daemon: error initializing graphdriver: /nvme/docker contains several valid graphdrivers: overlay2, devicemapper;
可以通过在配置文件中添加以下内容解决
"storage-driver":"overlay2"
更改后文件内容
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"storage-driver":"overlay2"
}
要注意json文件的格式以及","的使用