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

相关推荐
报错小能手43 分钟前
Kubernetes入门实战课 4
云原生·容器·kubernetes
NJCloud1 小时前
Docker 镜像管理:分层结构、构建优化与最佳实践
java·docker·容器
harmony&1 小时前
Docker 容器技术从入门到实战:生态系统、安装部署与架构详解
docker·容器·架构
天天喝旺仔1 小时前
Docker 镜像瘦身实战:多阶段构建把体积缩小 90%
运维·后端·ci/cd·docker·云原生·容器·性能优化
NJCloud2 小时前
Docker 私有仓库部署:Registry、加密传输与认证鉴权
运维·网络·docker·云原生·容器
w200512242 小时前
K8S控制器管理
linux·云原生·容器·kubernetes
深念Y3 小时前
Nuxt 项目 Docker 构建:从 pnpm+node 迁移到全 bun
java·前端·docker
小张同学a.3 小时前
Docker 容器实战 2—— docker 仓库
linux·运维·服务器·docker·容器
随便做点啥7 小时前
32卡-64G-910B4-16后端-(Qwen3.8-27B-W8A8)集群部署报告
运维·服务器·经验分享·docker·vllm
CJY62113 小时前
k8spod管理
云原生·容器·kubernetes