环境
ubuntu20.04, 普通用户使用sudo权限。
需求
linux系统上,默认的docker跟目录在/var/lib/docker目录下,但是根分区太小。想要将docker根目录挪到其它磁盘,防止以后镜像和容器增加后磁盘满了。
操作
先停止所有docker容器,然后停止docker服务:
systemctl stop docker
然后将/var/lib/docker复制到目标路径下
sudo cp /var/lib/docker ./
修改/etc/docker/daemon.json, 配置新的根目录:
{"data-root": "/mnt/data/docker"
}
然后重启docker 服务:
systemctl start docker
最后启动docker业务容器。
报错
启动mysql服务失败,查看报错信息:
Entrypoint] MySQL Docker Image 8.0.25-1.2.3-server
[Entrypoint] Starting MySQL 8.0.25-1.2.3-server
2025-07-21T10:08:15.192097Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.25) starting as process 1
2025-07-21T10:08:15.213123Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
mysqld: Can't create/write to file '/tmp/ibUi25Ct' (OS errno 13 - Permission denied)
2025-07-21T10:08:15.282413Z 1 [ERROR] [MY-012576] [InnoDB] Unable to create temporary file; errno: 13
2025-07-21T10:08:15.282588Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
2025-07-21T10:08:15.282799Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2025-07-21T10:08:15.283226Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2025-07-21T10:08:15.283609Z 0 [ERROR] [MY-010119] [Server] Aborting
错误分析
主要是权限问题。猜测是docker跟目录中的某些目录权限被改变了。
解决办法
复制的时候加-a,保留目录权限
sudo cp /var/lib/docker ./ -a
使用nfs目录存储docker根目录的问题
将docker根目录复制到nfs目录报错
使用nfs挂载了一个远程的磁盘,希望将docker根目录复制进去节省本地磁盘,结果出错了:
$ sudo cp /var/lib/docker/ ./test_docker -rf
[sudo] password for xxx:
cp: cannot create special file './test_docker/docker/volumes/backingFsBlockDev': Unknown error 524
使用nfs分区新建新的根分区
如果不拷贝老的根分区目录,直接在/etc/docker/daemon.json修改data-root指向nfs分区中的目录。docker服务启动起来了,但是docker load -i加载镜像非常慢,一个小时都没加载完一个镜像。
总结
使用nfs分区存储docker根目录有问题,无论是否是新建的。应该优先将docker根目录放物理磁盘上。