сбит с толку `не осталось места на устройстве` исключение - PullRequest
1 голос
/ 17 мая 2019

Я наткнулся на исключение

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 / container

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

[Update] Я также очистил containers и 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' ## Нет оборванных изображений ..

popup diagram

1 Ответ

1 голос
/ 17 мая 2019
  1. По умолчанию Docker хранит все в /var/lib/docker, поэтому каждый путь в вашем контейнере является абсолютным внутри вашего контейнера , но относительно вашего корневого пути докера (то есть: /var/lib/docker/containers)
  2. Чтобы узнать ресурс, используемый Docker, вы можете выполнить эту команду docker system df.Чтобы очистить все, что в данный момент не используется докером, вы можете выполнить эту команду docker system prune.В противном случае вы можете просто указать, какой ресурс вы хотите очистить (например, docker container prune).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...