Як перевірити, чи працюють двигун докера та контейнер докера?


103

У сценарії мені потрібно перевірити:

а) Чи працює двигун докера?
б) Дано ім'я контейнера, чи запущений цей контейнер докера?

[початкове формулювання цього питання було неоднозначним, деякі люди трактували його як "механізм перевірки докера", а інші як "перевірити контейнер докера"]


4
Будь-яка команда докера (крім docker -v), як docker ps
Глен Пірс,

docker attach containerName
Маттіа Динозавр

1
або спробуйте docker ps
Маттіа Динозавр

2
sudo systemctl status docker
Duk

docker ps----- Ця команда покаже лише контейнери RUNNING
Suhaib

Відповіді:


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?
Франсуа Ромен

15
if [ $(docker inspect -f '{{.State.Running}}' $container_name) = "true" ]; then echo yup; else echo nope; fi
BMitch

2
Я використовую, docker inspect -f '{{.State.Restarting}}' $container_nameоскільки я запускаю свій контейнер із політикою перезапуску, хоча тут "true" - це те, чого ви хочете уникати.
stav meir

4
І bash, і docker будуть скаржитися на вищезазначене 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
Це те, що мені потрібно, бо це працює на всіх платформах !!
Ролджі

легко і просто ... ПРАЦЮВАЛИ.
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 ]]антипаттерн.
триплі

9

Іноді ви не знаєте повного імені контейнера, у цьому випадку це те, що мені вдалося:

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

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


Реконструйовано для видалення масивної колекції антишаблонів програмування оболонки.
триплеє

8

Будь-яка команда докера (крім docker -v), наприкладdocker ps якщо Docker запущений, ви отримаєте деяку дійсну відповідь, інакше ви отримаєте повідомлення, що включає "Чи працює ваш докер-демон?"

Ви також можете перевірити свого диспетчера завдань.


5

Ви можете перевірити, за допомогою цієї команди systemctl status dockerвона покаже статус докера. Якщо ви хочете почати ви можете використовувати systemctl start dockerзамість systemctlви можете спробувати також з service, service docker statusі service docker startвідповідно.


5
Ця відповідь передбачає, що кінцевий користувач використовує systemdяк свій ініціатор.
Рафаель

systemctl status dockerправильно показати, працює служба докера. Дякую.
imsrgadich

3

Ви також можете перевірити, чи працює певний контейнер докера чи ні, використовуючи таку команду:

docker inspect postgres | grep "Running"

Ця команда перевірить, чи працює, наприклад, мій контейнер postgres, чи ні, і поверне результат як "Running": 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


0

Як я перевіряю SSH.Run:

systemctl

Якщо відповідь: Не вдалося отримати з'єднання D-Bus: Операція не дозволена

Це докер або контейнер WSL.


0

docker ps -a

Ви можете бачити всі контейнери докера, незалежно від того, живий він чи мертвий.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.