Como verificar se o docker está funcionando ou não


96

Eu sou novo no docker. Estou escrevendo um script simples para docker. Preciso verificar se o docker está funcionando ou não. Existe um comando para verificar o nome do contêiner


3
Qualquer comando docker (exceto docker -v), como docker ps
Glen Pierce

docker attach containerName
Mattia Dinosaur

ou tente docker ps
Mattia Dinosaur

2
sudo systemctl status docker
Duk

docker ps----- Este comando mostrará apenas contêineres em
execução

Respostas:


101

Se você estiver procurando por um contêiner específico, pode executar:

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

Para evitar problemas com um contêiner que está em um loop de falha e reiniciando constantemente para não mostrar que está ativo, o item acima pode ser melhorado marcando o Statuscampo:

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

Se você quiser saber se o dockerd está sendo executado na máquina local e se o systemd está instalado, execute:

systemctl show --property ActiveState docker

Você também pode se conectar ao docker com docker infoou docker versione eles apresentarão um erro se o daemon não estiver disponível.


como você colocaria docker inspect …dentro de uma ifinstrução de um script bash?
François Romain

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

2
Eu uso docker inspect -f '{{.State.Restarting}}' $container_namedesde que iniciei meu contêiner com uma política de reinicialização, embora aqui "verdadeiro" seja o que você deseja evitar.
stav meir

4
Tanto o bash quanto o docker reclamarão da ifinstrução acima , quando o contêiner não estiver em execução. Isso esconde o vômito indesejado para o caso falso: if [ "$(docker inspect -f '{{.State.Running}}' ${container_name} 2>/dev/null)" = "true" ]; then echo yup; else echo nope; fi
Trevor

1
@MarcoLackovic parece que você perdeu a parte "você instalou o systemd" acima.
BMitch

43

Acabei usando

docker info

para verificar com um script bash se o mecanismo do docker está em execução.


4
Esta resposta é subestimada. É multiplataforma e passa / falha rapidamente.
Andy Fleming

docker info > /dev/null 2>&1se você não precisa da saída
buggymcbugfix

22

você pode verificar o estado do docker usando: systemctl is-active docker

  ~  systemctl is-active docker
active

você pode usá-lo como:

  ~  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 *

Isso não responde à pergunta. "para verificar o nome do contêiner"
jens.klose

sim, parece que a questão é ambígua, para verificar se o contêiner está em execução, você deve usar docker ps --filter name=pattern, então você pode formatar a saída para verificar apenas o status adicionando este sinalizador:--format {{.Status}}
Hernan Garcia

15

Liste todos os contêineres:

docker container ls -a

ls = lista
-a = all

Verifique a coluna "status"


1
Isso é o que eu precisava, porque funciona em todas as plataformas !!
Rolljee

fácil e simples ... FUNCIONADO.
RMati

14

Para usuários do OS X (Mojave 10.14.3)

Aqui está o que eu uso no meu script Bash para testar se o Docker está sendo executado ou não

# 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
Refatorei isso para remover o if [[ $? -ne 0 ]]antipadrão.
tripleee

7

Qualquer comando docker (exceto docker -v), comodocker ps If Docker is running, você obterá alguma resposta válida, caso contrário, você receberá uma mensagem que inclui "O daemon do docker está instalado e funcionando?"

Você também pode verificar seu gerenciador de tarefas.


7

Às vezes você não sabe o nome completo do contêiner, neste caso, isto funcionou para mim:

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

Listamos todos os processos de contêiner em execução ( docker ps -anos mostraria também aqueles que não estão em execução, mas não é o que eu precisava), procuramos uma palavra específica ( grepparte) e simplesmente falhamos se não encontrarmos pelo menos um contêiner em execução cujo nome contenha nosso palavra-chave.


Refatorado para remover uma enorme coleção de antipadrões de programação
tripleee

5

Você pode verificar com este comando, systemctl status dockerele mostrará o status da janela de encaixe. Se você quiser começar, pode usar em systemctl start dockervez de, systemctltambém pode tentar com service, service docker statuse service docker startrespectivamente.


5
Esta resposta assume que o usuário final está usando systemdcomo init.
Rafael

systemctl status dockermostrar corretamente se o serviço docker está em execução. Obrigado.
imsrgadich

3

Você também pode verificar se um determinado contêiner do docker está em execução ou não usando o seguinte comando:

docker inspect postgres | grep "Running"

Este comando irá verificar se, por exemplo, meu contêiner postgres está rodando ou não e irá retornar a saída como "Running": true

Espero que isto ajude.


Isso é exatamente o que eu estava procurando. E funciona. (É bom quando as pessoas que votam em algo dizem o porquê, para que os novatos possam aprender a etiqueta SO melhor. :))
allenjom

Eu não votei contra, mas "Erro: Não existe tal objeto: postgres"
lançado em

3

Corre:

docker version

Se o docker estiver em execução, você verá:

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

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

Se o docker não estiver em execução, você verá:

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

Error response from daemon: Bad response from Docker engine


1

em um Mac, você pode ver a imagem:

insira a descrição da imagem aqui

se você clicar com o botão direito no ícone do docker, verá:

insira a descrição da imagem aqui

alternativamente:

docker ps

e

docker run hello-world


0

Como faço o check-in SSH.Run:

systemctl

Se a resposta: Falha ao obter a conexão D-Bus: Operação não permitida

É um docker ou contêiner WSL.


0

docker ps -a

Você pode ver todos os contêineres do docker, estejam eles vivos ou mortos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.