You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

磁盘尚有空间却遇OSError: [Errno 28]设备无剩余空间的Docker问题求助

问题:Docker构建提示设备无剩余空间但实际磁盘有剩余

问题现象

  • 之前使用jupyter/datascience-notebook镜像部署的容器中,部分笔记本无法连接内核,报错:
    [Errno 28] No space left on device: '/home/jovan/.local/share//jupyter/runtime/kernel-b87ad915-8d97-44ac-80a6-0ab7bd5580bf.json'
  • 删除容器后执行以下命令重建时失败:
    D:\Github\compras-publicas>docker compose run opt bash -c "cd ./src && ./pipeline-join.sh && ./pipeline-clean.sh"
    
  • 构建过程中RUN pip install dbfread步骤报错,错误日志:
    [+] Building 2.5s (6/14)
     => [internal] load build definition from Dockerfile                                                               0.0s
     => => transferring dockerfile: 32B                                                                                0.0s
     => [internal] load .dockerignore                                                                                  0.0s
     => => transferring context: 2B                                                                                    0.0s
     => [internal] load metadata for docker.io/jupyter/datascience-notebook:latest                                     1.4s
     => CACHED [ 1/10] FROM docker.io/jupyter/datascience-notebook:latest@sha256:50b773a924586ee721f7729a2dbcb9103a6c  0.0s
     => [internal] load build context                                                                                  0.0s
     => => transferring context: 37B                                                                                   0.0s
     => ERROR [ 2/10] RUN pip install dbfread                                                                          1.1s
    ------
     > [ 2/10] RUN pip install dbfread:
    #0 0.709 ERROR: Exception:
    #0 0.709 Traceback (most recent call last):
    #0 0.709   File "/opt/conda/lib/python3.11/site-packages/pip/_internal/cli/base_command.py", line 169, in exc_logging_wrapper
    #0 0.709     status = run_func(*args)
    #0 0.709              ^^^^^^^^^^^^^^^
    #0 0.709   File "/opt/conda/lib/python3.11/site-packages/pip/_internal/cli/req_command.py", line 248, in wrapper
    #0 0.709     return func(self, options, args)
    #0 0.709            ^^^^^^^^^^^^^^^^^^^^^^^^^
    #0 0.709   File "/opt/conda/lib/python3.11/site-packages/pip/_internal/commands/install.py", line 333, in run
    #0 0.709     build_tracker = self.enter_context(get_build_tracker())
    #0 0.709                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    #0 0.709   File "/opt/conda/lib/python3.11/site-packages/pip/_internal/cli/command_context.py", line 27, in enter_context
    #0 0.709     return self._main_context.enter_context(context_provider)
    #0 0.709            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    #0 0.709   File "/opt/conda/lib/python3.11/contextlib.py", line 505, in enter_context
    #0 0.709     result = _enter(cm)
    #0 0.709              ^^^^^^^^^^
    #0 0.709   File "/opt/conda/lib/python3.11/contextlib.py", line 137, in __enter__
    #0 0.709     return next(self.gen)
    #0 0.709            ^^^^^^^^^^^^^^
    #0 0.709   File "/opt/conda/lib/python3.11/site-packages/pip/_internal/operations/build/build_tracker.py", line 46, in get_build_tracker
    #0 0.709     root = ctx.enter_context(TempDirectory(kind="build-tracker")).path
    #0 0.709                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    #0 0.709   File "/opt/conda/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py", line 125, in __init__
    #0 0.709     path = self._create(kind)
    #0 0.709            ^^^^^^^^^^^^^^^^^^
    #0 0.709   File "/opt/conda/lib/python3.11/site-packages/pip/_internal/utils/temp_dir.py", line 164, in _create
    #0 0.709     path = os.path.realpath(tempfile.mkdtemp(prefix=f"pip-{kind}-"))
    #0 0.709                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    #0 0.709   File "/opt/conda/lib/python3.11/tempfile.py", line 368, in mkdtemp
    #0 0.709     _os.mkdir(file, 0o700)
    #0 0.709 OSError: [Errno 28] No space left on device: '/tmp/pip-build-tracker-kcli6ob4'
    #0 0.949 WARNING: There was an error checking the latest version of pip.
    ------
    failed to solve: executor failed running [/bin/bash -o pipefail -c pip install dbfread]: exit code: 2
    

磁盘空间检查结果

执行df -h输出:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdd        251G  1.8G  237G   1% /
none            5.9G  4.0K  5.9G   1% /mnt/wsl
/dev/sdc        251G  245G     0 100% /mnt/wsl/docker-desktop-data/isocache
none            5.9G   12K  5.9G   1% /mnt/wsl/docker-desktop/shared-sockets/host-services
/dev/sdb        251G  120M  239G   1% /mnt/wsl/docker-desktop/docker-desktop-user-distro
/dev/loop0      476M  476M     0 100% /mnt/wsl/docker-desktop/cli-tools
tools           118G   85G   34G  72% /init
none            5.9G  4.0K  5.9G   1% /run
none            5.9G     0  5.9G   0% /run/lock
none            5.9G     0  5.9G   0% /run/shm
none            5.9G     0  5.9G   0% /run/user
tmpfs           5.9G     0  5.9G   0% /sys/fs/cgroup
drivers         118G   85G   34G  72% /usr/lib/wsl/drivers
lib             118G   85G   34G  72% /usr/lib/wsl/lib
drvfs           118G   85G   34G  72% /mnt/c
drvfs           932G  580G  353G  63% /mnt/d
drvfs           932G  652G  280G  70% /mnt/e

解决方案(入门级)

问题核心是WSL环境中Docker的镜像缓存分区/dev/sdc已占满,/dev/loop0是CLI工具镜像,满了不影响核心功能,无需关注。

方法1:清理Docker无用资源

  • 图形界面操作:打开Docker Desktop,进入设置 -> 资源 -> 磁盘,点击清理按钮,删除未使用的镜像、容器、卷和缓存。
  • 命令行操作:在WSL终端执行:
    docker system prune -a
    
    执行时输入y确认,该命令会删除所有未被容器使用的镜像、容器、网络和卷,释放大量空间。

方法2:调整Docker磁盘配额

打开Docker Desktop的设置 -> 资源 -> 高级,调整磁盘使用的最大配额(确保主机磁盘有剩余空间),保存后重启Docker Desktop。

方法3:临时指定pip临时目录

如果不想清理镜像,可修改Dockerfile,将pip安装的临时文件指向主机有空间的目录,比如:

ENV TMPDIR /mnt/d/tmp
RUN mkdir -p $TMPDIR && pip install dbfread

将/mnt/d/tmp替换为你主机上有足够空间的路径(比如D盘的tmp文件夹),这样pip安装时会把临时文件放到该目录,避免占用WSL的临时空间。

内容的提问来源于stack exchange,提问作者Chvz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 20:52:01