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


103

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

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

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


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и они выдадут ошибку, если демон будет недоступен.


как бы вы поместили 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>

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.