RKE 创建 Pod 报错 no space left on device
RKE 创建 Pod 的时候,事件显示磁盘空间不足:
1 | 2025-10-23T14:33:28.367344576Z E1023 14:33:28.367304 3018 pod_workers.go:191] Error syncing pod 39982f3f-4435-47f0-bd9a-401eac35d8e5 ("logistics-api-678f476dc5-rw89k_prod-feiyuntms(39982f3f-4435-47f0-bd9a-401eac35d8e5)"), skipping: failed to "CreatePodSandbox" for "logistics-api-678f476dc5-rw89k_prod-feiyuntms(39982f3f-4435-47f0-bd9a-401eac35d8e5)" with CreatePodSandboxError: "CreatePodSandbox for pod \"logistics-api-678f476dc5-rw89k_prod-feiyuntms(39982f3f-4435-47f0-bd9a-401eac35d8e5)\" failed: rpc error: code = Unknown desc = failed to create a sandbox for pod \"logistics-api-678f476dc5-rw89k\": Error response from daemon: error creating overlay mount to /u/var/lib/docker/overlay2/62fae66c0cd56dd2fdd458c0d454ee14f1622da5231fcf361f21fa76b167e9bb-init/merged: no space left on device" |
Docker 报错:
1 | Oct 23 14:33:28 oser504254 dockerd[2462]: time="2025-10-23T14:33:28.363765012Z" level=error msg="error unmounting /u/var/lib/docker/overlay2/62fae66c0cd56dd2fdd458c0d454ee14f1622da5231fcf361f21fa76b167e9bb-init/merged: invalid argument" storage-driver=overlay2 |
但在宿主机检查容器相关的数据目录,发现磁盘可用空间都是充足的。
问题根因
这是低版本 Docker 存在的已知问题,Docker 在处理挂载了宿主机根目录(或其它大范围目录)的容器时,会因为挂载传播(shared/rshared)导致挂载点在容器与宿主之间不断复制,形成挂载循环。这些重复的临时挂载没有被正确隔离或清理,最终让系统的挂载表被耗尽,引发 no space left on device 错误。
相关 Issue:
- https://github.com/moby/moby/pull/44210
- https://github.com/moby/moby/pull/38993
- https://github.com/moby/moby/issues/38995
问题复现
节点安装 Docker,版本低于 24.0.0。
运行 Docker 容器,映射路径至容器中,需要确保 Docker 使用的
/var/lib/docker目录被映射至容器中(如果 Docker 的 graph 路径不为/var/lib/docker,需映射对应的 Docker graph 路径):
1 | docker run --name busybox -d -v /var/lib:/var/lib harbor.warnerchen.com/library/busybox:latest sleep 3d |
- 通过
docker cp不断向容器拷贝文件:
1 | mkdir -p /tmp/testfiles |
- 查看容器
/proc/self/mountinfo挂载点数量,会持续增加:
1 | docker exec busybox wc -l /proc/self/mountinfo |
- 问题复现,具体报错为:
1 | Error response from daemon: mount /var/lib:/var/lib/docker/overlay2/a0753cfeeb68f65c233b3329dda3be3bf96d74fa21070128a7cba104318c96e3/merged/var/lib, flags: 0x5000: no space left on device |
- 删除临时目录:
1 | rm -rf /tmp/testfiles |
将 Docker 版本升级至 28.5.1。
再次进行测试,问题没有出现:
1 | root@test-1:~# for i in $(seq 1 100000); do echo "This is file $i" > /tmp/testfiles/file_$i.txt; docker cp /tmp/testfiles/file_$i.txt busybox:/tmp/file_$i.txt; done |
解决方案
- 重启 Docker。
- 找到 mountpoint 未释放的容器,将其重启。
- 升级 Docker 版本至 24 以上。
- 使用 Containerd Runtime。
RKE 创建 Pod 报错 no space left on device
https://warnerchen.github.io/2025/10/30/RKE-创建-Pod-报错-no-space-left-on-device/
You need to set
install_url to use ShareThis. Please set it in _config.yml.