Ubuntu下Docker使用sysbox-runc作为运行时创建容器失败求助
在Ubuntu系统中配置sysbox-runc作为Docker运行时,sysbox-runc本身可正常运行,但执行容器创建命令时失败。
环境细节
- 系统:Ubuntu
- 操作身份:root用户
- 默认runc运行时可正常创建容器
执行命令
docker run --runtime=sysbox-runc nginx
报错信息
docker: Error response from daemon: failed to create shim task: OCI runtime create failed: container_linux.go:425: starting container process caused: process_linux.go:607: container init caused: process_linux.go:578: handleReqOp caused: rootfs_init_linux.go:366: failed to mkdirall /var/lib/sysbox/shiftfs/2e6d4302-28cd-4d9d-827e-6088b8b34e89/var/lib/kubelet: mkdir /var/lib/sysbox/shiftfs/2e6d4302-28cd-4d9d-827e-6088b8b34e89/var/lib/kubelet: value too large for defined data type caused: mkdir /var/lib/sysbox/shiftfs/2e6d4302-28cd-4d9d-827e-6088b8b34e89/var/lib/kubelet: value too large for defined data type: unknown.
ERRO[0000] error waiting for container: context canceled
1. 检查文件系统类型
"value too large for defined data type" 通常与文件系统不支持大文件或特定inode属性相关。先确认/var/lib/sysbox所在分区的文件系统:
df -T /var/lib/sysbox
- 若为
ext3,建议升级为ext4(ext4原生支持更大的文件和inode容量); - 若需保留ext3,挂载时添加
large_files选项,修改/etc/fstab后重新挂载。
2. 验证shiftfs模块与用户命名空间配置
sysbox依赖shiftfs实现用户命名空间映射,检查模块加载状态:
lsmod | grep shiftfs
未加载则手动加载:
modprobe shiftfs
同时确保Docker启用了用户命名空间隔离,编辑/etc/docker/daemon.json添加:
{ "userns-remap": "default" }
修改后重启Docker服务:
systemctl restart docker
3. 清理sysbox缓存目录
缓存目录可能存在损坏的元数据文件,清理后重试:
rm -rf /var/lib/sysbox/shiftfs/* systemctl restart docker sysbox
4. 核对版本兼容性
确认sysbox-runc与Docker版本兼容,建议升级至双方最新稳定版:
sysbox-runc --version docker --version
版本不匹配时,重新安装对应兼容版本的sysbox。
内容的提问来源于stack exchange,提问作者Thilee

