复制docker根目录遇到的权限问题

环境

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服务失败,查看报错信息:

python 复制代码
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根目录放物理磁盘上。

相关推荐
天一生水water1 天前
ubuntu使用毫秒镜像方式安装docker mysql
ubuntu·阿里云·docker
Qayrup1 天前
docker 搭建私有仓库,推送并拉取
运维·docker·容器
郭庆汝1 天前
docker拉取英伟达官方cuda11.8镜像
docker·cuda11.8
天下不喵2 天前
Ubuntu24.04安装Docker过程记录
docker
黑黍2 天前
如何在k8s中配置并使用nvidia显卡
云原生·容器·kubernetes
冷血~多好2 天前
使用docker部署elk,实现日志追踪
elk·docker·容器
会飞的小蛮猪2 天前
SkyWalking运维之路(Java探针接入)
java·运维·经验分享·容器·skywalking
天一生水water2 天前
docker-compose安装
运维·docker·容器
蓝象_2 天前
docker安装配置mysql
mysql·docker·容器
Cxzzzzzzzzzz2 天前
Kubernetes 架构
容器·架构·kubernetes