Bash: множественная установка npm в фоновом режиме выдает ошибку «Нет места на устройстве» - PullRequest
0 голосов
/ 23 декабря 2018

Я настраиваю Docker на облачной вычислительной машине Google, 1 виртуальный ЦП и 3,75 ГБ оперативной памяти.

Если я просто запускаю 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

Iпроверил иноды, и на /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

1 Ответ

0 голосов
/ 24 декабря 2018

Исходя из вывода df -h, корневой каталог (/ dev / sda1) имеет только 455 МБ свободного места.

Каждый раз, когда вы запускаете сборку docker, docker-client (CLI) отправляет все содержимое каталога Dockerfile в docker-daemon, который создает образ.

Так, например, если у вас есть три службы, каждая из которых имеет каталоги по 300 МБ, вы можете создавать их последовательно, используя 455 МБ свободного места, но для их одновременного создания требуется 300 МБ * 3 свободного места.для docker-daemon для кэширования и построения образов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...