来自守护程序的 Docker 错误响应:处理 tar 文件时出错(退出状态 1):设备上没有剩余空间

Posted

技术标签:

【中文标题】来自守护程序的 Docker 错误响应:处理 tar 文件时出错(退出状态 1):设备上没有剩余空间【英文标题】:Docker Error response from daemon: Error processing tar file(exit status 1): no space left on device 【发布时间】:2021-11-23 09:05:10 【问题描述】:

我需要从一个虚拟盒子图像创建一个 docker 的图像。该文件为 16GB。当我运行命令行# tar -c . | docker import - <myImagename> 时出现以下错误。

附: : 容器是空的。

错误:

来自守护程序的错误响应:处理 tar 文件时出错(退出状态 1): 写 /var/lib/docker/overlay2/f8bb15057c3b3578c13e1122be1d00ca72b3301b7a0bf27262edc759e9f207fb/diff/var/lib/docker/overlay2/f8bb15057c3b3578c13e1122be1d00ca72b3301b7a0bf27262edc759e9f207fb/diff/var/lib/cassandra/commitlog/CommitLog-6-1633100360364.log: 设备上没有剩余空间

码头工人信息:

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.6.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 1
 Server Version: 20.10.8
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: e25210fe30a0a703442421b0f60afac609f950a3
 runc version: v1.0.1-0-g4144b63
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-1127.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 15.51GiB
 Name: GDBDEV03
 ID: UGGJ:AIIA:7C44:DZXR:PNYH:2WQH:GPKI:TFUL:N2WZ:5RRB:X3JK:VU3B
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

编辑

[root@GDBDEV03 chroot0]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 7.8G     0  7.8G   0% /dev
tmpfs                    7.8G     0  7.8G   0% /dev/shm
tmpfs                    7.8G  8.7M  7.8G   1% /run
tmpfs                    7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/mapper/centos-root   14G   13G  1.3G  91% /
/dev/sda1               1014M  152M  863M  15% /boot
tmpfs                    1.6G     0  1.6G   0% /run/user/0

【问题讨论】:

【参考方案1】:

首先运行docker image prune 清理所有悬空图像

如果这没有帮助你可能需要检查这个答案

Docker error : no space left on device

【讨论】:

感谢您的回复,但我在写我的问题之前尝试了所有这些步骤。存储库是空的,没有图像。没有。我看到几个人有同样的问题,但我没有尝试解决方案。你能知道另一种方式吗? 您可以释放系统上的任何空间吗?执行“df -h”,你应该有一个 100% 满的挂载点。 @PeterHauge,我跑了 df -h。我更新了问题。【参考方案2】:

目前尚不清楚您正在尝试做什么(. 在哪里,这是本地 docker 引擎还是您将图像发送到远程节点)。将 VM 映像放入容器映像中会产生明显的代码异味(容器不是 VM)。

也就是说,根据描述,您有一个 16GB 的文件,您正尝试在一个 1.3G 可用于 docker 的系统上打包(假设您从 /var/lib/docker 运行 docker)。在任何条件下都无法正常工作。通常,您需要 2-3 倍的可用空间来处理打包图层所需的副本。

因此,对于您的根分区,您需要将其从 14GB 扩展到 45GB(当前 13 + 3x16)。扩展分区的步骤取决于您的底层存储和文件系统类型,并且更适合 superuser.SE。

【讨论】:

是的,我正在尝试从 /mnt/chroot0 创建一个 docker 映像。我正在使用命令行 tar -c . | docker -import - <image_name>。VM 有 16GB。我阅读了您的答案,这是不可能的,正确的? 解决办法就是多买RAM,对吗? @LucianaOliveira 更大的硬盘,而不是更多的 RAM。但这仍然感觉你做错了什么。 import 命令旨在从 docker 导出中导入,我不知道它是否会处理任意 tar,即使可以,您得到的只是文件系统,而不是内核,也不是所有正在运行的服务,因为容器不是虚拟机。 那么从虚拟机创建 docker 镜像的最佳方法是什么?我需要通过 Docker 部署所有这些环境。我只需要在 \mnt\chroot0 中。我用小零件做一些过程,它是进口的。你有什么想法以最好的方式做到这一点吗? @LucianaOliveira 建议的创建镜像的方法是使用 Dockerfile 和 docker build,从最小的基础镜像开始(在 Docker Hub 的官方镜像中有很多可供选择),然后添加您的应用程序.它是可重现的并且更容易更新。虚拟机封装一个主机,容器封装一个应用程序,两者之间没有直接的转换。 谢谢,BMitch!你能用这个解释回答我的问题吗?你是理解我观点的开发者。我错了。现在我构建了我的第一个图像。【参考方案3】:

使用 Docker Hub 官方镜像中的基础镜像解决了该错误,我需要安装该镜像,而不是自己创建所有者基础镜像。这篇文章教会了我很多。我祝贺大家做出贡献。我分离了有助于启动解决方案的提示:

"@LucianaOliveira 建议的创建图像的方法是使用 Dockerfile 和 docker build,从一个最小的基础镜像开始(有 在 Docker Hub 的官方镜像中有很多可供选择),并添加您的 应用。它是可重现的并且更容易更新。虚拟机打包一个 主机,容器打包一个应用程序,没有直接翻译 两者之间。 – BMitch”

【讨论】:

以上是关于来自守护程序的 Docker 错误响应:处理 tar 文件时出错(退出状态 1):设备上没有剩余空间的主要内容,如果未能解决你的问题,请参考以下文章

docker:来自守护进程的错误响应:无法选择设备驱动程序“”具有功能:[[gpu]]

CannotPullContainerError:来自守护程序的错误响应:ECR 存储库映像的拉取访问被拒绝,存储库不存在或可能需要“docker login”

Docker:来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:296:

Docker 抛出 FATA [0000] 来自守护进程的错误响应

来自守护进程的 Docker 错误响应:“冲突……容器已在使用”

来自守护进程的 Docker 错误响应:无法启动容器