从 AWS 拉取 docker 镜像时设备上没有剩余空间

J.M*_*ain 3 amazon-web-services docker docker-compose

我正在从我的 AWS 中提取各种 docker 图像,但它一直卡在最终图像上并出现以下错误

ERROR: for <container-name>  failed to register layer: Error processing tar file(exit status 1): symlink libasprintf.so.0.0.0 /usr/lib64/libasprintf.so: no space left on device
ERROR: failed to register layer: Error processing tar file(exit status 1): symlink libasprintf.so.0.0.0 /usr/lib64/libasprintf.so: no space left on device
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?

我试过停止 docker,删除 var/lib/docker 并重新启动它,但它卡在了同一个地方

的结果

df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/nvme0n1p1  8.0G  6.5G  1.6G  81% /

devtmpfs        3.7G     0  3.7G   0% /dev

tmpfs           3.7G     0  3.7G   0% /dev/shm

tmpfs           3.7G   17M  3.7G   1% /run

tmpfs           3.7G     0  3.7G   0% /sys/fs/cgroup

tmpfs           753M     0  753M   0% /run/user/0

tmpfs           753M     0  753M   0% /run/user/1000
Run Code Online (Sandbox Code Playgroud)

J.M*_*ain 5

问题在于 EC2 实例没有分配足够的 EBS 存储。按照以下步骤将修复它:

  • 导航到 ec2
  • 查看您的实例的详细信息并找到根设备和块设备
  • 按路径并选择 EBS ID
  • 单击音量面板中的操作
  • 选择修改音量
  • 输入所需的卷大小(默认为 8GB,不需要更多)
  • ssh 进入实例
  • 运行 lsblk 以查看可用卷并注意大小
  • 在要调整大小的卷上运行 sudo growpart /dev/volumename 1
  • 运行 sudo xfs_growfs /dev/volumename (lsblk 的挂载点列中带有 / 的那个)


Nit*_*ain 5

较旧的 docker 映像、卷等可能仍滞留在您的 EBS 存储中。来自泊坞窗文档

\n
\n

Docker 采用保守的方法来清理未使用的对象(通常称为 \xe2\x80\x9c 垃圾收集\xe2\x80\x9d),例如图像、容器、卷和网络:除非您明确指出,否则这些对象通常不会被删除要求 Docker 这样做。这可能会导致 Docker 使用额外的磁盘空间。

\n
\n

通过 SSH 连接到您的 EC2 实例并验证空间是否实际被占用:

\n
ssh ec2-user@<public-ip>\ndf -h\n
Run Code Online (Sandbox Code Playgroud)\n

然后你可以修剪掉旧图像:

\n
docker system prune\n
Run Code Online (Sandbox Code Playgroud)\n

阅读此命令的警告消息!

\n

您还可以修剪体积。如果您没有在本地存储文件(无论如何您都不应该这样做,它们应该存储在 AWS S3 之类的文件中),请执行此操作

\n
Use with Caution:\n\ndocker system prune --volumes\n
Run Code Online (Sandbox Code Playgroud)\n