使用Jenkins和Docker构建时出现“设备上没有剩余空间”的错误提示。

8

我们使用Jenkins构建Docker镜像,一切正常,直到上周我尝试在Jenkins中构建镜像时,每次都失败,并出现以下错误信息:"Error response from daemon: Error processing tar file(exit status 1): write /app/node_modules/acorn/dist/acorn_loose.es.js: no space left on device" (失败的文件可能因项目而异)。如果我尝试在服务器上使用Docker,则可以构建镜像,但是在Jenkins上会失败。

我尝试删除旧的容器和镜像等,但无济于事。磁盘空间和inode看起来没问题,所以我不知道现在要尝试什么。感激任何帮助。

"docker info" 的结果:

Containers: 55
 Running: 48
 Paused: 0
 Stopped: 7
Images: 59
Server Version: 17.03.2-ce
Storage Driver: overlay
 Backing Filesystem: extfs
 Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.45-rancher
Operating System: RancherOS v1.1.0
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 19.61 GiB
Name: rancher
ID: Z7Z3:T3NW:N4O3:FKMZ:7KH6:FJ7R:TJ6A:FXLW:KNUL:WMRC:ED74:KHEM
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 dockerhub.companysite.net:5000
 127.0.0.0/8
Live Restore Enabled: false

"df -h"的结果:

Filesystem      Size  Used Avail Use% Mounted on
overlay          47G   27G   18G  60% /
tmpfs           9.9G     0  9.9G   0% /dev
tmpfs           9.9G     0  9.9G   0% /sys/fs/cgroup
/dev/sda1        47G   27G   18G  60% /.r
shm              64M     0   64M   0% /dev/shm
tmpfs           9.9G     0  9.9G   0% /sys/firmware

"df -ih" 的结果如下:

Filesystem     Inodes IUsed IFree IUse% Mounted on
overlay           13M  2.8M  9.8M   22% /
tmpfs            2.5M    16  2.5M    1% /dev
tmpfs            2.5M    15  2.5M    1% /sys/fs/cgroup
/dev/sda1         13M  2.8M  9.8M   22% /.r
shm              2.5M     1  2.5M    1% /dev/shm
tmpfs            2.5M     1  2.5M    1% /sys/firmware

1
TAR文件有多大? - vivekyad4v
@vivekyad4v 只有20.78MB。 - Matt
你的Jenkins本身是否作为Docker容器运行? 能否分享构建失败的Dockerfile? - sxm1972
2个回答

7

您可能有许多旧的悬浮图像导致问题,请尝试:

docker volume rm $(docker volume ls -qf dangling=true)

(这将删除一些东西,因此在执行此操作之前,您可能需要检查任何悬空卷中是否有您想保留的内容)

我已经尝试过了,但是它并没有解决问题,因为根据“docker卷ls-qf悬空=true”的命令,没有悬空的镜像了。 - Matt
可能听起来很傻,但你尝试过重新启动docker服务吗? 它可能会悄悄地持有一些已被删除的东西。 - Ardesco
我不太愿意重启Docker服务,因为有很多正在运行的容器等等。我对Docker相对较新,所以对我尝试的东西持怀疑态度。重启Docker服务会影响容器等吗? - Matt
是的,这将导致您需要重新启动它们全部。 - Ardesco
这就是为什么我宁愿暂时不重启服务。如果我从RancherOS服务器运行构建命令,则可以成功构建,但如果我从Jenkins UI运行构建,则会出现“设备上没有剩余空间”的错误,这使我相信Docker工作正常,但Jenkins却不行?在Jenkins记录“将构建上下文发送到Docker守护程序20.78MB”消息后立即失败。 - Matt
显示剩余4条评论

5

你应该清理旧的容器、镜像和卷。你可以使用prune命令只用一个命令来删除它们:

docker system prune

移除所有未使用的容器、网络、镜像(包括悬空和未引用的),可选地移除卷。

输出:

WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all build cache
Are you sure you want to continue? [y/N] y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接