Как проверить, запущены ли движок докеров и контейнер докеров?

103

В скрипте мне нужно проверить:

а) Двигатель докера работает?
б) Учитывая имя контейнера, запущен ли этот контейнер докеров?

[первоначальная формулировка этого вопроса была неоднозначной, некоторые люди интерпретировали ее как «проверить механизм докеров», а другие - как «проверить контейнер докеров»]

user5517392
источник
5
Любая команда docker (кроме docker -v), например docker ps
Глен Пирс
docker attach containerName
Маттиа Динозавр
2
или попробуйте docker ps
Mattia Dinosaur
2
sudo systemctl status docker
Дук
1
docker ps----- Эта команда покажет только
РАБОЧИЕ

Ответы:

109

Если вы ищете конкретный контейнер, вы можете запустить:

if [ "$( docker container inspect -f '{{.State.Running}}' $container_name )" == "true" ]; then ...

Чтобы избежать проблем с контейнером, который находится в цикле сбоя и постоянно перезапускается из-за того, что он работает, вышеуказанное можно улучшить, проверив Statusполе:

if [ "$( docker container inspect -f '{{.State.Status}}' $container_name )" == "running" ]; then ...

Если вы хотите узнать, работает ли dockerd на локальном компьютере и у вас установлен systemd, вы можете запустить:

systemctl show --property ActiveState docker

Вы также можете подключиться к докеру с помощью docker infoили, docker versionи они выдадут ошибку, если демон будет недоступен.

BMitch
источник
как бы вы поместили docker inspect …внутри ifинструкцию bash-скрипта?
François Romain
15
if [ $(docker inspect -f '{{.State.Running}}' $container_name) = "true" ]; then echo yup; else echo nope; fi
BMitch 05
2
Я использую docker inspect -f '{{.State.Restarting}}' $container_nameс тех пор, как запускаю свой контейнер с политикой перезапуска, хотя здесь «истина» - это то, чего вы хотите избежать.
став меир
4
И bash, и докер будут жаловаться на приведенный выше ifоператор, когда контейнер не запущен. За этим скрывается нежелательная выпивка по ложному делу: if [ "$(docker inspect -f '{{.State.Running}}' ${container_name} 2>/dev/null)" = "true" ]; then echo yup; else echo nope; fi
Тревор,
1
@MarcoLackovic звучит так, будто вы пропустили вышеупомянутую часть «у вас установлен systemd».
BMitch
48

В итоге я использовал

docker info

чтобы проверить с помощью сценария bash, работает ли движок докера.

случайный контроль
источник
6
Этот ответ недооценен. Он кроссплатформенный и быстро проходит / терпит неудачу.
Энди Флеминг
2
docker info > /dev/null 2>&1если вам не нужен вывод
buggymcbugfix
22

вы можете проверить состояние докера, используя: systemctl is-active docker

➜  ~  systemctl is-active docker
active

вы можете использовать его как:

➜  ~  if [ "$(systemctl is-active docker)" = "active" ]; then echo "is alive :)" ; fi
is alive :)

➜  ~  sudo systemctl stop docker

➜  ~  if [ "$(systemctl is-active docker)" = "active" ]; then echo "is alive :)" ; fi
 * empty response *
Эрнан Гарсия
источник
Это не ответ на вопрос. «для проверки по названию контейнера»
jens.klose
да, похоже, вопрос неоднозначный, чтобы проверить, запущен ли контейнер, вы должны использовать docker ps --filter name=pattern, затем вы можете отформатировать вывод, чтобы проверить только статус, добавив этот флаг:--format {{.Status}}
Эрнан Гарсия
16

Перечислить все контейнеры:

docker container ls -a

ls= список
-a= все

Проверить столбец «статус»

Сенио Кайрес
источник
1
Это то, что мне нужно, потому что он работает на всех платформах !!
Rolljee
легко и просто ... РАБОТАЛО.
RMati
15

Для пользователей OS X (Mojave 10.14.3)

Вот что я использую в своем сценарии Bash, чтобы проверить, запущен ли Docker или нет

# Check if docker is running
if ! docker info >/dev/null 2>&1; then
    echo "Docker does not seem to be running, run it first and retry"
    exit 1
fi
Лапин
источник
1
Я отредактировал это, чтобы удалить if [[ $? -ne 0 ]]антипаттерн.
Tripleee
12

Любая команда docker (кроме docker -v), например, docker ps Если Docker запущена, вы получите корректный ответ, в противном случае вы получите сообщение, включающее «Ваш демон Docker запущен и работает?»

Вы также можете проверить свой диспетчер задач.

Глен Пирс
источник
10

Иногда вы не знаете полное имя контейнера, в этом случае у меня сработало следующее:

if docker ps | grep -q keyword
then 
    echo "Running!"
else
    echo "Not running!"
    exit 1
fi

Мы перечисляем все запущенные процессы контейнера ( docker ps -aпоказывали бы нам также не запущенные, но это не то, что мне нужно), мы ищем конкретное слово ( grepчасть) и просто терпим неудачу, если мы не нашли хотя бы один запущенный контейнер, имя которого содержит наш ключевое слово.

Эмилия Тиль
источник
Произведен рефакторинг для удаления огромного набора антипаттернов программирования оболочки.
Tripleee
5

Вы можете проверить с помощью этой команды, systemctl status dockerона покажет статус докера. Если вы хотите начать, вы можете использовать systemctl start dockerвместо, systemctlвы также можете попробовать service, service docker statusи service docker startсоответственно.

Наани
источник
5
В этом ответе предполагается, что конечный пользователь использует в systemdкачестве init.
Рафаэль
systemctl status dockerправильно показать, работает ли служба докеров. Спасибо.
imsrgadich
4

Вы также можете проверить, запущен ли конкретный контейнер докеров или нет, используя следующую команду:

docker inspect postgres | grep "Running"

Эта команда проверит, например, работает ли мой контейнер postgres или нет, и вернет вывод как «Выполняется»: true

Надеюсь это поможет.

Раджусекхар Алле
источник
Это именно то, что я искал. И это работает. (Хорошо, когда люди, которые голосуют против чего-то, говорят «почему», чтобы новички могли лучше научиться
ТАКОМ
Я не провалить, но «Ошибка: Нет такого объекта: Postgres»
Гед
3

Бегать:

docker version

Если докер запущен, вы увидите:

Client: Docker Engine - Community
 Version:           ...
 [omitted]

Server: Docker Engine - Community
 Engine:
  Version:          ...
 [omitted]

Если докер не запущен, вы увидите:

Client: Docker Engine - Community
 Version:           ...
 [omitted]

Error response from daemon: Bad response from Docker engine
Марко Лацкович
источник
2

Если основная цель - «Как запустить контейнер при запуске Docker?»

Мы можем использовать политику перезапуска Docker

Чтобы добавить политику перезапуска в существующий контейнер:

Docker: добавьте политику перезапуска в уже созданный контейнер

Пример:

docker update --restart=always <container>
mrgnw
источник
1

на Mac вы можете увидеть изображение:

введите описание изображения здесь

если вы щелкните правой кнопкой мыши значок докера, вы увидите:

введите описание изображения здесь

альтернативно:

docker ps

а также

docker run hello-world

Дэвид Одхиамбо
источник
1

Запустите эту команду в терминале:

docker ps

Если докер не запущен, вы получите следующее сообщение:

Ответ об ошибке от демона: наберите unix docker.raw.sock: connect: соединение отклонено

Ясир Хасан
источник
0

Как я проверяю SSH.Run:

systemctl

Если ответ: не удалось установить соединение D-Bus: операция не разрешена

Это докер или контейнер WSL.

Сачин Верма
источник
0

docker ps -a

Вы можете увидеть все докер-контейнеры, живые они или мертвые.

Ыкимми
источник