首页 > 解决方案 > 对“设备上没有剩余空间”异常感到困惑

问题描述

我遇到了一个例外

openj9-openjdk-jdk9/.git/HEAD
Error processing tar file(exit status 1): write /root/openj9-openjdk-jdk9/.git/objects/pack/pack-203ba520304c417be0828d545d85ffd13566ac41.pack: no space left on device

和一个弹出图说'/root'只有672M可用,执行命令时:

docker build -t openj9 -f Dockerfile .

Dockerfile 是

FROM ubuntu:16.04

RUN apt-get update \
  && apt-get install -qq -y --no-install-recommends \
    autoconf \
    ca-certificates \
    ccache \
    cpio \
    file \
    g++-4.8 \
    gcc-4.8 \
    git \
    git-core \
    libasound2-dev \
    libcups2-dev \
    libelf-dev \
    libfreetype6-dev \
    libnuma-dev \
    libx11-dev \
    libxext-dev \
    libxrender-dev \
    libxt-dev \
    libxtst-dev \
    make \
    openjdk-8-jdk \
    pkg-config \
    realpath \
    ssh \
    unzip \
    wget \
    zip \
  && rm -rf /var/lib/apt/lists/*

COPY openj9-openjdk-jdk9.tar.gz    /root/
COPY  freemarker.tgz  /root/
# Create links for c++,g++,cc,gcc
RUN ln -s g++ /usr/bin/c++ \
  && ln -s g++-4.8 /usr/bin/g++ \
  && ln -s gcc /usr/bin/cc \
  && ln -s gcc-4.8 /usr/bin/gcc

# Download and setup freemarker.jar to /root/freemarker.jar
RUN cd /root \
#  && wget https://sourceforge.net/projects/freemarker/files/freemarker/2.3.8/freemarker-2.3.8.tar.gz/download -O freemarker.tgz \
  && tar -xzf freemarker.tgz freemarker-2.3.8/lib/freemarker.jar --strip=2 \
  && rm -f freemarker.tgz \
  && tar xvf openj9-openjdk-jdk9.tar.gz \
  && rm -f openj9-openjdk-jdk9.tar.gz

WORKDIR /root

执行时发生错误tar xvf openj9-openjdk-jdk9.tar.gz

让我困惑的是,目录/root所在的分区还有很大的空间,即4.3G,如下图。

Filesystem      Size  Used Avail Use% Mounted on
udev            3.8G     0  3.8G   0% /dev
tmpfs           778M   78M  701M  10% /run
/dev/sda1        32G   27G  4.3G  86% /
tmpfs           3.8G  113M  3.7G   3% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           3.8G     0  3.8G   0% /sys/fs/cgroup
/dev/loop0       90M   90M     0 100% /snap/core/6673
/dev/loop1       90M   90M     0 100% /snap/core/6818
/dev/loop2      141M  141M     0 100% /snap/webdingding/1
/dev/loop3       92M   92M     0 100% /snap/core/6531
/dev/loop4      254M  254M     0 100% /snap/electronic-wechat/7
/dev/sda6        31G  1.1G   29G   4% /opt
/dev/sda5        38G   25G   11G  71% /home
/dev/sdb7        52G   25G   25G  50% /home_bak
/dev/sdb5        37G   28G  7.4G  79% /backup
/dev/sdb8        81G   68G  8.8G  89% /opt1
/dev/sdb6        97G   72G   20G  79% /other
cgmfs           100K     0  100K   0% /run/cgmanager/fs
tmpfs           778M  172K  778M   1% /run/user/1000

所以,我的两个主要问题是:

  1. 如何理解容器中的路径?容器路径/root是否与宿主机中的绝对路径相同/root,还是映射到宿主机中的其他一些路径?

  2. 问题的解决方案。我试过这个,但失败了。由于容器日志文件非常小

    root@shijie:~# du -d1 -h /var/lib/docker/containers

    40K /var/lib/docker/containers/f41f43b5a4372dda5e2aba71c3ae8cc58170b2f13183e22942fa62747910ac7a
    44K /var/lib/docker/containers
    

[更新] 我也清除了containersand images,然后重新执行命令,结果还是一样。

sudo docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                   PORTS               NAMES
f41f43b5a437        b68439663072        "/bin/sh -c 'cd /roo…"   2 hours ago         Exited (0) 2 hours ago                       brave_albattani

sudo docker rm f41f43b5a437 sudo docker images

   REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    <none>              <none>              b68439663072        2 hours ago         1.66GB
    ubuntu              16.04               a3551444fc85        2 weeks ago         119MB

sudo docker rmi b68439663072 a3551444fc85

sudo docker images -aq -f 'dangling=true' ##没有悬空图像..

弹出图

标签: dockercontainers

解决方案


  1. 默认情况下,Docker 将所有内容存储在容器中,因此容器中的每个路径都是容器内的/var/lib/docker绝对路径,但相对于您的 docker 根路径(即 : )/var/lib/docker/containers
  2. 为了知道 Docker 使用的资源,你可以执行这个命令docker system df。为了清理 docker 当前未使用的所有内容,您可以执行此命令docker system prune。否则,您只需指定要清理的资源(例如docker container prune)。

推荐阅读