Mac上的Docker:设备上没有剩余空间
我正试图从安装Java8的Ubuntu14.04构建一个基本Docker映像。以下是我目前掌握的情况:Mac上的Docker:设备上没有剩余空间,docker,java-8,Docker,Java 8,我正试图从安装Java8的Ubuntu14.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 &&a
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
知道我哪里出错了吗
更新: 我添加了
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分配足够的空间(类似于JVMOutOfMemoryException
问题).尝试添加
apt-get install -y software-properties-common
要获取
添加apt存储库
。在另一个运行
命令中,或者在使用添加apt存储库
之前,docker存储其文件的文件系统已满。这就是为什么解压缩下载的java archieve时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)删除它们。这可能是因为docker.qcow2已满 检查以下文件的大小
ls-lah~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/docker.qcow2
docker for mac上有一个与此文件相关的公开问题,该文件是一个包含yo的稀疏图像。看
我也有同样的问题,因为我不介意重建我的容器,我只是删除了Docker.qcow2,重新启动了Docker,它解决了我的问题。处理时要特别小心,尤其是当您有大量依赖的图像且无法重建时。或手动添加回购。我不知道这是否仍然是真的,但这曾经带来了一堆python垃圾。谢谢@Robert(+1)-请查看我的更新,有什么想法吗?再次感谢!我想总的来说,我只是有点吃惊,没有一个标准的Ubuntu 14.04和JRE 8 Docker映像…@smeeb官方的Java Docker映像是基于Debian的。离Ubuntu足够近了。请参阅:@smeeb看起来不再需要
python软件属性
,但您还应该添加-y
标志。我已经更新了我的答案。如果您还没有看到关于增加磁盘大小的文档,请检查您的虚拟机中是否有足够的空间。您可以通过ssh通过docker机器ssh
进入vm。如果您使用默认安装的docker toolbox,您的机器名将为default
。当您在机器中时,可以调用df-h
。相关输出是以/dev/sda1/
开头的行。如果Use%
列中的值接近100,则表示虚拟磁盘已满。在这种情况下,您可以开始删除容器和映像,或者增加磁盘大小。请报告您的发现。自Docker 1.9.0以来,还有一个用于删除未使用卷的api。您可以使用docker volume ls--filter-dangling=true
找到它们,并使用docker volume rm$(docker volume ls--filter-dangling=true-q)
docker 1.13.0添加了用于内务管理的专用命令来删除它们。您可以发出docker image prune
和docker volume prune
来删除未使用的(“悬空”)图像和卷。还有docker系统prune
,它删除停止的容器、未使用的卷、未使用的网络和悬空的图像。新命令要求在实际删除任何内容之前进行确认。我的计算机上不存在此文件。我有一个沉重的库/Containers/com.docker.docker/Data/vms/0/docker.raw
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs