docker - 对“设备上没有剩余空间”异常感到困惑
问题描述
我遇到了一个例外
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
所以,我的两个主要问题是:
如何理解容器中的路径?容器路径
/root
是否与宿主机中的绝对路径相同/root
,还是映射到宿主机中的其他一些路径?问题的解决方案。我试过这个,但失败了。由于容器日志文件非常小
root@shijie:~# du -d1 -h /var/lib/docker/containers
40K /var/lib/docker/containers/f41f43b5a4372dda5e2aba71c3ae8cc58170b2f13183e22942fa62747910ac7a 44K /var/lib/docker/containers
[更新]
我也清除了containers
and 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'
##没有悬空图像..
解决方案
- 默认情况下,Docker 将所有内容存储在容器中,因此容器中的每个路径都是容器内的
/var/lib/docker
绝对路径,但相对于您的 docker 根路径(即 : )/var/lib/docker/containers
- 为了知道 Docker 使用的资源,你可以执行这个命令
docker system df
。为了清理 docker 当前未使用的所有内容,您可以执行此命令docker system prune
。否则,您只需指定要清理的资源(例如docker container prune
)。
推荐阅读
- php - Laravel 5.7多个外键引用同一个表主键
- angular - 将服务响应映射到组件模型以显示在视图上
- ruby-on-rails - 消息:失败/错误:需要 File.expand_path('../../config/environment', __FILE__)
- javascript - 无法通过 Angular 组件中的 Promises 赋值
- angular - Angular MatTable - 视口内的中心可扩展行
- java - 模拟静态方法时出现内容类型错误
- excel - 将处理限制到某些单元格
- reactjs - 有人可以告诉我反应 Js 中子元素的这种循环实现有什么问题吗
- javascript - 如何修复缺少的 jsx 表达式容器围绕文字字符串?
- python - Django模型解耦