bash - Bash:在后台安装多个 npm 会给出错误,“设备上没有剩余空间”
问题描述
我正在谷歌云计算机、1 个 vCPU 和 3.75 GB 内存上设置 docker。
如果我只是简单地运行docker-compose up --build
,它确实可以工作,但该过程是连续且缓慢的。所以我正在使用这个 bash 脚本,以便我可以在后台构建图像,并跳过通常的顺序过程。
command=$1
shift
jobsList=""
taskList[0]=""
i=0
#Replaces all the fluff with nothing, and we get our job Id
function getJobId(){
echo "$(echo $STRING | sed s/^[^0-9]*// | sed s/[^0-9].*$//)"
}
for task in "$@"
do
echo "Command is $command $task"
docker-compose $command $task &> ${task}.text &
lastJob=`getJobId $(jobs %%)`
jobsList="$jobsList $lastJob"
echo "jobsList is $jobsList"
taskList[$i]="$command $task"
i=$(($i + 1))
done
i=0
for job in $jobsList
do
wait %$job
echo "${taskList[$i]} completed with status $?"
i=$(($i + 1))
done
我以以下方式使用它:
availableServices=$(docker-compose config --services)
while IFS='' read -r line || [[ -n "$line" ]]
do
services+=$(echo "$line ")
done <<<"$availableServices"
./runInParallel.sh build $services
我将 docker-compose.yml 中的可用服务串在一起,并将其传递给我的脚本。
但问题最终是所有进程都失败并出现以下错误:
npm WARN tar ENOSPC: no space left on device, write
Unhandled rejection Error: ENOSPC: no space left on device, write
我检查了 inode,/dev/sda1
只使用了 44%。
这是我的命令输出df -h
:
Filesystem Size Used Avail Use% Mounted on
udev 1.8G 0 1.8G 0% /dev
tmpfs 370M 892K 369M 1% /run
/dev/sda1 9.6G 9.1G 455M 96% /
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop0 55M 55M 0 100% /snap/google-cloud-sdk/64
/dev/loop2 55M 55M 0 100% /snap/google-cloud-sdk/62
/dev/loop1 55M 55M 0 100% /snap/google-cloud-sdk/63
/dev/loop3 79M 79M 0 100% /snap/go/3095
/dev/loop5 89M 89M 0 100% /snap/core/5897
/dev/loop4 90M 90M 0 100% /snap/core/6130
/dev/loop6 90M 90M 0 100% /snap/core/6034
/dev/sda15 105M 3.6M 101M 4% /boot/efi
tmpfs 370M 0 370M 0% /run/user/1001
这是输出df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 469499 385 469114 1% /dev
tmpfs 472727 592 472135 1% /run
/dev/sda1 1290240 636907 653333 50% /
tmpfs 472727 1 472726 1% /dev/shm
tmpfs 472727 8 472719 1% /run/lock
tmpfs 472727 18 472709 1% /sys/fs/cgroup
/dev/loop0 20782 20782 0 100% /snap/google-cloud-sdk/64
/dev/loop2 20680 20680 0 100% /snap/google-cloud-sdk/62
/dev/loop1 20738 20738 0 100% /snap/google-cloud-sdk/63
/dev/loop3 9417 9417 0 100% /snap/go/3095
/dev/loop5 12808 12808 0 100% /snap/core/5897
/dev/loop4 12810 12810 0 100% /snap/core/6130
/dev/loop6 12810 12810 0 100% /snap/core/6034
/dev/sda15 0 0 0 - /boot/efi
tmpfs 472727 10 472717 1% /run/user/1001
解决方案
从您的df -h
输出中,根目录 (/dev/sda1) 只有 455MB 的可用空间。
每当您运行 docker build 时,docker-client (CLI) 会将 Dockerfile 目录的所有内容发送到构建映像的 docker-daemon。
因此,例如,如果您有三个服务,每个服务都有 300MB 的目录,您可以使用 455MB 可用空间按顺序构建它们,但要同时构建它们,您需要 300MB*3 的可用空间供 docker-daemon 缓存并构建图像。
推荐阅读
- python - Pycharm 无法自动完成某些模块
- python-3.x - 下载链接中的空格 python beautifulsoup
- python - 如何从给定的输入中检索日期
- c# - C# MongoDb 驱动程序包含子对象
- django - 如何过滤/获取 2 个单词 __str__
- r - 需要 TRUE/FALSE 的 if() 缺失值出错,但内部实际上有一个布尔参数
- html - 将 HTML 放在 Rails 助手中
- sql-server - 从数据库项目文件中插入二进制种子数据
- android - 如何以表格形式显示excel数据?
- c# - AdomdConnection 可以接受令牌吗