Проблема с удаленным удалением образов докера в CentOS - PullRequest
0 голосов
/ 03 января 2019

Я установил кластер Kubernetes, используя Rancher, на 5 разных узлах CentOS (скажем, node1, node2, ..., node5).Для нашего запуска CI мы должны очищать устаревшие образы докера перед каждым запуском.Я создал скрипт, который работает на узле 1, и ssh без пароля включен от узла 1 до остальных узлов.Соответствующий раздел скрипта выглядит примерно так:

#!/bin/bash
helm ls --short --all | xargs -L1 helm delete --purge

echo "Deleting old data and docker images from Rancher host node."
rm -rf /var/lib/hadoop/* /opt/ci/*
docker images | grep localhost | awk '{print $3}' | xargs docker rmi -f

hosts=(node2 node3 node4 node5)
for host in ${hosts[*]}
do
  echo "Deleting old data and docker images from ${host}"
  ssh root@${host} docker images | grep localhost | awk '{print $3}' | xargs docker rmi -f
  ssh root@${host} rm -rf /var/lib/hadoop/* /opt/ci/*
done
echo "All deletions are complete! Proceeding with installation."

sleep 2m

Проблема в том, что, хотя команда docker rmi внутри цикла for выполняется для всех остальных 4 узлов, я получаю ошибку Error: No such image: <image-id> для каждого изизображения.Но если я выполню ту же команду на этом узле, это будет успешно.Я не уверен, в чем здесь проблема.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 января 2019

Проблема в том, что единственная первая команда в канале ssh выполняется удаленно:

ssh root@${host} docker images | grep localhost | awk '{print $3}' | xargs docker rmi -f

Оболочка понимает, что это

ssh ssh-arguments | grep grep-arguments | awk awk-arguments | xarg xarg-arguments

И в результате получается, что единственнаяdocker images выполняется удаленно.Затем вывод с удаленного docker images передается на локальный компьютер, где он фильтруется с помощью grep и awk, а затем на локальном компьютере выполняется docker rmi.

Необходимо добавить кавычкисообщить оболочке, что все в командной строке является аргументом ssh:

ssh root@${host} "docker images | grep localhost | awk '{print $3}' | xargs docker rmi -f"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...