Оболочка: проверьте, существует ли контейнер докеров

Позвольте мне бросить кирпич, чтобы привлечь сюда нефрит.

dnf список всех | less показывает все пакеты (включая установленные и доступные). Вывод состоит из двух разделов: «Установленные пакеты» и «Доступные пакеты». Всем «Установленным пакетам» предшествует знак @, а «Доступным пакетам» нет. Итак, я считаю, что знаки @ показывают, что пакеты установлены. Если пакет установлен, но его исходное репо было удалено, я полагаю, что отображается знак @@ .

Исходный код dnf размещен по адресу https://github.com/rpm-software-management/dnf . После загрузки кода src выполните команду grep в командной строке -ri. в каталоге и ничего не возвращает. Однако на его странице на github это упоминается

. Он осуществляет управление пакетами с использованием библиотек RPM, libsolv и hawkey.

Я смотрю на hawkey, который размещен в рамках того же проекта, по адресу https://github.com/rpm-software-management/hawkey . Посмотрите его код с помощью командной строки grep -ri. , он показывает некоторые результаты.

./src/types.h:#define HY_CMDLINE_REPO_NAME "@commandline"
./hawkey.spec:- fix: commandline RPMs do not provide their files (RhBug:1112810) (Ales Kozumplik)

Итак, командная строка взята из пакета hawkey . Что касается вопроса, почему @comandline отображается в команде dnf list , я предполагаю, что код dnf не может правильно использовать hawkey .

3
10.02.2017, 10:54
3 ответа
sudo docker images -q nginx
if [ $? -eq 0 ];
then
     echo "existing"
else
     echo "missing"
fi

$? : Статус выхода. Каждая команда возвращает статус выхода или код выхода, успешная команда возвращает '0', а неудачная возвращает ненулевое значение (диапазон от 1 до 255), которое обычно можно интерпретировать. как код ошибки .

Если контейнер существует, то статус выхода будет 0, иначе он будет 1.

0
27.01.2020, 21:18

$? - это не строка, а статус выхода из sudo (в данном случае). Чтобы использовать его правильно, сравните его с нулем с помощью -gt или используйте if (( $? )) (в оболочке типа bash или ksh93, которая выполняет арифметическую оценку с помощью (( ... ))).

Если sudo docker images -q nginx выдает строку, если контейнер существует, и ничего, если его нет, то вы можете сохранить это в переменной и посмотреть, пуста она или нет:

result=$( sudo docker images -q nginx )

if [[ -n "$result" ]]; then
  echo "Container exists"
else
  echo "No such container"
fi
7
27.01.2020, 21:18

Я попробовал docker images -q {Image Name}, как было предложено в «лучшем ответе», но он вернул только идентификатор изображения, а не контейнера. Независимо от того, запущен контейнер или нет, он всегда возвращает идентификатор изображения.

Если вы хотите узнать, запущен ли КОНТЕЙНЕР, вам нужно применить следующую команду:

docker ps -q -f name={container Name}

Если контейнер существует, возвращается идентификатор контейнера. Пустая строка возвращается, если она остановлена ​​или не существует.

5
17.04.2020, 08:07

Теги

Похожие вопросы