Docker运行容器报错OCI runtime create failed: invalid rootfs求助
问题分析与解决方法
错误原因
你的问题确实和修改daemon.json中的data-root路径直接相关:
- 路径包含空格,且在JSON配置中使用双反斜杠的写法,导致Docker在解析路径时出现混乱,错误日志里同时出现Linux风格的
/和Windows风格的\就是典型表现——Docker试图在类Unix的容器运行时环境中解析Windows格式的带空格路径,自然找不到对应文件。 - 可能修改配置后未完全重启Docker服务,导致新旧路径配置冲突,缓存的镜像/容器元数据路径不匹配。
解决步骤
1. 修正daemon.json的路径配置
打开daemon.json(通常位于C:\ProgramData\Docker\config),将data-root的路径改为正斜杠写法(JSON中无需转义),或者直接改用无空格的路径(更推荐,避免后续其他问题):
{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": false, "data-root": "E:/my software/Docker/ProgramData" } // 或者更稳妥的无空格路径: // "data-root": "E:/Docker/ProgramData"
2. 完全重启Docker服务
- 打开Docker Desktop,点击右上角设置图标,选择Restart;
- 或者通过Windows服务管理器,找到
Docker Desktop Service,右键选择重启。
3. 清理旧镜像与缓存
删除之前构建的有问题的镜像,并清理Docker缓存:
# 删除friendnet-client镜像 docker rmi friendnet-client # 清理所有未使用的镜像、容器、卷和网络(确认后输入y执行) docker system prune -a
4. 重新构建并测试
回到项目目录,重新构建镜像并运行:
# 重新构建镜像 docker build -t friendnet-client . # 测试进入容器shell docker run -it friendnet-client sh
额外建议
- 尽量避免在Docker的核心路径(如data-root)中使用空格,CLI工具和容器运行时对带空格路径的解析容易出现兼容性问题;
- 如果使用WSL2作为Docker后端,建议将
data-root设置到WSL的文件系统中(比如\\wsl$\Ubuntu\var\lib\docker),不仅能避免路径格式问题,还能提升Docker的运行性能。
内容的提问来源于stack exchange,提问作者Haitam-Elgharras
相关产品推荐
相关产品推荐

