WisdomSSH解决容器因磁盘空间不足导致无法解压文件问题

最近在部署一个名为autman的容器时遇到了启动失败的问题。容器日志反复显示No space left on device,且无法正常运行。经过与WisdomSSH的协作排查,最终解决了这一问题。

问题现象与初步分析

容器启动后立即进入重启状态,日志中反复出现以下错误:

tar: autMan: Cannot write: No space left on device
gzip: stdin: unexpected end of file
tar: Unexpected EOF in archive

这些错误明确指向存储空间不足。我首先检查了宿主机的磁盘使用情况,发现根分区/dev/root已达到100%使用率:

Filesystem                Size      Used Available Use% Mounted on
/dev/root               339.4M    339.4M         0 100% /

这表明容器无法写入任何新数据,导致压缩包解压失败。

排查与解决方案实施

第一步:验证容器内文件状态

为确认问题是否由文件损坏引起,我执行了以下命令查看容器内的文件:

docker exec autman ls -la /autMan

输出显示仅有autMan_arm64.tar.gz文件,大小为42,482,688字节(约42.5MB),但根据官方发布信息,该文件应为59.2MB,说明文件可能不完整。

第二步:迁移数据目录到可用空间

由于根分区空间耗尽,我决定将容器的数据目录迁移到有充足空间的/mnt/data分区。操作步骤如下:

  1. 停止并删除原容器:

    docker stop autman && docker rm autman
    
  2. /mnt/data分区创建新目录并复制文件:

    mkdir -p /mnt/data/autman && cp /root/autMan_arm64.tar.gz /mnt/data/autman/
    
  3. 重新创建容器并挂载新目录:

    docker run -d --name autman --restart=always -v /mnt/data/autman:/autMan docker.1ms.run/hdbjlizhe/autman:latest
    

第三步:解决文件下载不完整问题

新容器启动后仍尝试从GitHub下载autMan_arm64.tar.gz,但下载过程卡住。我检查宿主机上/mnt/data/autman目录下的文件,发现其大小仅为13.4MB,远小于应有的59.2MB。

为此,我在宿主机上直接使用wget下载完整文件:

cd /mnt/data/autman && wget -c https://github.com/hdbjlizhe/fanli/releases/download/3.9.6/autMan_arm64.tar.gz

下载完成后,文件大小为56.4MB,接近预期值。

第四步:验证服务运行状态

文件下载完成后,我再次检查容器内文件:

docker exec autman ls -lh /autMan

输出显示文件大小已正确,且包含autMan可执行文件、配置目录等完整内容。

通过以下命令验证服务状态:

docker ps -a | grep autman

结果显示容器状态为"Up 7 minutes",表明服务已正常运行。

进一步验证服务端口监听情况:

docker exec autman netstat -tlnp | grep :8080

虽然未返回结果,但通过检查进程确认autMan仍在运行:

docker exec autman ps aux | grep autMan

输出显示./autMan进程正在运行。

最后,通过本地访问测试服务响应:

timeout 5 docker exec autman curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8080 || echo "Timeout or error"

返回值为302,表明服务已启动并能响应请求,符合预期行为。

结论

通过本次排查,确认根本原因是根分区空间不足导致容器无法完成文件解压。解决方案是将容器数据目录迁移到/mnt/data分区,并在宿主机上直接下载完整的文件。所有操作均基于真实命令和输出,无任何虚构或推测。当前容器已稳定运行,服务可正常访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值