Mac 上的 Docker : No space left on device

标签 docker java-8

我正在尝试从安装 Java 8 的 Ubuntu 14.04 构建一个基本 Docker 镜像。这是我目前所拥有的:

FROM ubuntu:14.04
MAINTAINER Me Myself <memyself@example.com>

WORKDIR /

RUN \
    echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \
    apt-get install -y software-properties-common && \
    add-apt-repository -y ppa:webupd8team/java && \
    apt-get update && \
    apt-get install -y oracle-java8-installer && \
    rm -rf /var/lib/apt/lists/* && \
    rm -rf /var/cache/oracle-jdk8-installer

当我运行 docker build -t memyself/docker_sample . 安装 Java 时出现以下错误:

myuser@mymachine:~/sandbox/workspace/docker_sample$docker build -t memyself/docker_sample .
Sending build context to Docker daemon 127.1 MB
Step 0 : FROM ubuntu:14.04
 ---> 91e54dfb1179
Step 1 : MAINTAINER Me Myself <memyself@example.com>
 ---> Using cache
 ---> 070127f8f0e5
Step 2 : WORKDIR /
 ---> Using cache
 ---> d2c8a7633d41
Step 3 : RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select
true | debconf-set-selections &&   add-apt-repository -y ppa:webupd8team/java &&
apt-get update &&   apt-get install -y oracle-java8-installer &&   rm -rf /var/lib/apt/lists/* &&   rm -rf /var/cache/oracle-jdk8-installer
 ---> Running in 548fc192e112
/bin/sh: 1: add-apt-repository: not found
The command '/bin/sh -c echo oracle-java8-installer
shared/accepted-oracle-license-v1-1 select true | debconf-set-selections &&
add-apt-repository -y ppa:webupd8team/java &&   apt-get update &&
apt-get install -y oracle-java8-installer &&
rm -rf /var/lib/apt/lists/* &&   rm -rf /var/cache/oracle-jdk8-installer'     
returned a non-zero code: 127

知道我要去哪里出错吗?


更新:

我添加了 apt-get install -y software-properties-common 行,现在我得到了 巨大 数量的输出,其中一些是:

162816K ........ ........ ........ ........ ........ ........ 93% 3.92M 2s
165888K ........ ........ ........ ........ ........ ........ 95% 5.43M 1s
168960K ........ ........ ........ ........ ........ ........ 97% 6.35M 1s
172032K ........ ........ ........ ........ ........ ........ 98% 6.09M 0s
175104K ........ ........ ........ .....                     100% 5.27M=32s

2015-09-25 15:33:33 (5.43 MB/s) - 'jdk-8u60-linux-x64.tar.gz' saved [181238643/181238643]

Download done.
Removing outdated cached downloads...
tar: jdk1.8.0_60/jre/lib/charsets.jar: Wrote only 3072 of 10240 bytes
tar: jdk1.8.0_60/jre/lib/jce.jar: Cannot write: No space left on device
tar: jdk1.8.0_60/jre/lib/amd64/libbci.so: Cannot write: No space left on device
tar: jdk1.8.0_60/jre/lib/amd64/libjavafx_font_freetype.so: Cannot write: No space left on device
tar: jdk1.8.0_60/jre/lib/amd64/libawt_headless.so: Cannot write: No space left on device
tar: jdk1.8.0_60/jre/lib/amd64/libdt_socket.so: Cannot write: No space left on device
tar: jdk1.8.0_60/jre/lib/amd64/libmlib_image.so: Cannot write: No space left on device
...Huge amount of output omitted for brevity...
tar: jdk1.8.0_60/bin/jvisualvm: Cannot write: No space left on device
tar: jdk1.8.0_60/bin/jcontrol: Cannot write: No space left on device
tar: jdk1.8.0_60/release: Cannot write: No space left on device
tar: Exiting with failure status due to previous errors
cannot unpack jdk8
Oracle JDK 8 is NOT installed.
debconf: DbDriver "config": could not write /var/cache/debconf/config.dat-new: No space left on device
dpkg: error processing package oracle-java8-installer (--configure):
    subprocess installed post-installation script returned error exit status 1
Setting up gsfonts (1:8.11+urwcyr1.0.7~pre44-4.2ubuntu1) ...
dpkg: unrecoverable fatal error, aborting:
    unable to flush /var/lib/dpkg/updates/tmp.i after padding: No space left on device
E: Sub-process /usr/bin/dpkg returned an error code (2)

请务必注意,如果我尝试在我的 Mac 上启动多个其他镜像(从 Docker Hub 中提取),我会得到类似的“设备上没有剩余空间 "错误。 所以我相信这个最新的问题可能是由于我的机器上没有为 Docker 分配足够的空间(类似于 JVM OutOfMemoryException 问题)。

最佳答案

docker 存储文件的文件系统已满。这就是解压下载的 java 压缩包时 tar 阻塞的原因。

docker info 将显示文件所在的位置,例如

Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs

df -h 将告诉您文件系统上有多少可用磁盘空间。

使用 docker ps -a 查找可以删除的容器并使用 docker rm -v 将其移除(-v 很重要,因为它还会删除卷)。 使用 docker images 查找不需要的图像并使用 docker rmi 删除它们。

您可能有不再需要的悬空图像层。使用 docker rmi $(docker images -q -f dangling=true) 删除它们。

关于Mac 上的 Docker : No space left on device,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32770502/

相关文章:

mysql - Eclipse Che 中的 MySQL 运行时拒绝连接

docker - "docker pull redis"在 Docker for Windows 上失败

docker - 安装kubernetes是否会影响当前计算机所在的docker?

java - 使用 Java 8 的流和收集器将 Collection to Map 转换封装到一个方法中

java - 如何从 Java 8 流过滤中捕获已删除项目的列表?

java - 如何适应API的变化

java - Eclipse 开普勒 SR2 + Java 8

amazon-web-services - 如何使 Docker 镜像在 Fargate 中运行

docker - 在本地构建 docker compose 时如何使用 secret

android - 无法在 Android Studio 中访问 java.time