Bash: 后台安装多个 npm 报错,'No space left on device'

Bash: Multiple npm install in the background give error, 'No space left on device'

我正在 docker 一台 google 云计算机上设置,1 个 vCPU 和 3.75 GB 内存。

如果我只是 运行 docker-compose up --build,它确实有效,但过程是连续的且缓慢的。所以我正在使用这个 bash 脚本,以便我可以在后台构建图像,并跳过通常的顺序过程。

command=
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 可用 space。

每当您 运行 docker 构建时,docker-客户端(CLI)会将 Dockerfile 目录的所有内容发送到构建图片。

因此,例如,如果您有三个服务,每个服务都有 300MB 的目录,您可以按顺序构建它们,免费提供 455MB space,但要同时构建它们,您需要 300MB*3 的空间docker-daemon 免费 space 来缓存和构建图像。