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

相关推荐
tedcloud1231 小时前
Docker Compose 部署 Uptime Kuma:配置 HTTPS、QQ 邮箱告警与数据备份
服务器·网络协议·ui·docker·容器·https·开源
syntaxsage2 小时前
Dive:Docker 镜像层可视化分析工具
运维·其他·docker·容器
java_logo2 小时前
Docker 部署 Samba:轻松搭建局域网文件共享
运维·docker·容器·文件共享·samba·smb·轩辕镜像
todoitbo12 小时前
群晖NAS部署JmalCloud:Docker安装、文件管理、博客与公网访问完整教程
运维·docker·容器
是枚小菜鸡儿吖19 小时前
Home Assistant跨品牌智能家居教程:Docker部署、米家接入、vivo桥接与远程访问
docker·容器·智能家居
螺蛳粉 螺蛳粉1 天前
第 02 篇:镜像分层与 containerd 2.x 实战:SystemdCgroup 与 pause 镜像配置踩坑(底座认知 02)
docker·云原生·容器·kubernetes·etcd·containerd·kube-apiserver
wefg11 天前
【Docker】镜像相关指令
运维·docker·容器
java_logo1 天前
Docker 部署 DPanel:轻松搭建轻量容器管理平台
运维·docker·容器·podman·容器管理·dpanel·轩辕镜像
死磕音视频1 天前
Open WebUI 入门:用 Docker 装上本地对话界面并连接 Ollama
docker·ollama·本地大模型·open webui
分布式存储与RustFS1 天前
CI 老被 Docker Hub 的 429 卡住,自建 Registry 把镜像搬进内网
运维·docker·开源·镜像仓库·对象存储·ci·rustfs