Docker: o contêiner continua reiniciando novamente


108

Hoje implantei uma instância do MediaWiki usando a imagem do docker appcontainers / mediawiki e agora tenho um novo problema para o qual não consigo encontrar nenhuma pista. Depois de tentar anexar ao contêiner frontal do mediawiki usando:

docker attach mediawiki_web_1

que responde Terminatedsobre minha configuração por um motivo que ignoro, tentando também:

docker exec -it mediawiki_web_1 bash

Eu recebo algo próximo a uma mensagem de erro:

Error response from daemon: Container 81c07e4a69519c785b12ce4512a8ec76a10231ecfb30522e714b0ae53a0c9c68 is restarting, wait until the container is running

E aí está o meu novo problema, porque esse container nunca para de reiniciar. Posso ver que usando docker ps -aque sempre retorna um STATUS de Restarting (127) x seconds ago.

O que acontece é que consigo parar o contêiner (testei), mas iniciá-lo novamente parece trazê-lo de volta ao ciclo de reinicialização.

Alguma ideia de qual poderia ser o problema aqui? A coisa toda estava funcionando direito até que tentei prendê-la ...

Estou triste :-(


Tive sucesso ao excluir completamente meu cache do Docker, usando forums.docker.com/t/how-to-delete-cache/5753/2 (também adicionei a tag -f ao rmi). Então reconstruí meus contêineres e eles funcionaram.
alberto56

Para mim não bastou deletar containers e imagens (conforme descrito no link de @ alberto56), também tive que deletar o volume associado. Depois de fazer isso, estava de volta aos negócios.
Katie Byers de

Respostas:


172

O docker logscomando mostrará a saída que um contêiner está gerando quando você não o executa interativamente. É provável que isso inclua a mensagem de erro.

docker logs --tail 50 --follow --timestamps mediawiki_web_1

Você também pode executar um novo contêiner em primeiro plano docker run -ti <your_wiki_image>para ver o que ele faz. Você pode precisar mapear algumas configurações de seu docker-composeyml para o dockercomando.

Eu imagino que anexar ao processo de wiki de mídia causou um travamento que corrompeu algo em seus dados.


Resultado do comando que você forneceu que eu acho que está obtendo os últimos 50 logs relacionados ao container é o seguinte: 2016-05-26T16:38:27.362409489Z * Stopping web server apache2 * 2016-05-26T21:49:11.376549083Z Terminated 2016-05-26T21:49:11.688655642Z /bin/bash: /tmp/.runconfig.sh: No such file or directoryentão você está certo, há algo corrompido nos dados porque o runconfig.sh parece ter desaparecido. Vou tentar executar o contêiner mais uma vez em primeiro plano, como você aconselhou. Só preciso descobrir como especificar os 25 argumentos adequados ^^
Balessan

7
Obrigado, executar um novo contêiner fez o trabalho. O Docker deveria facilitar minha implantação, mas por enquanto é uma grande falha :-) Eu provavelmente preciso aprender e tentar mais ...
Balessan

Eu estava puxando meu cabelo tentando fazer o MySQL funcionar. docker ps -ame mostrou que estava travado em um loop de inicialização e seu comando me mostrou o porquê: arquivos já no diretório mysql que ele não pôde excluir. Você me salvou de mais horas puxando meu cabelo. Obrigado!
Blizzardengle

32

Quando docker kill CONTAINER_IDnão funciona e docker stop -t 1 CONTAINER_IDtambém não funciona, você pode tentar excluir o contêiner:

docker container rm CONTAINER_ID

Tive um problema semelhante hoje em que os contêineres estavam em um loop de reinicialização contínua.

O problema no meu caso estava relacionado ao fato de eu ser um engenheiro ruim.

De qualquer forma, resolvi o problema excluindo o contêiner, consertando meu código e, em seguida, reconstruindo e executando o contêiner.

Espero que isso ajude alguém com este problema no futuro


4
Coloquei um código incorreto em meu aplicativo e adicionei ao arquivo de composição do docker, o restart: alwaysque me deixou em um loop do docker tentando iniciar um aplicativo quebrado. :(
Giannis Katsini

4

Por experiência pessoal, parece que há um problema no contêiner do docker que não permite que ele reinicie. Portanto, algum processo dentro do contêiner está causando o travamento da reinicialização ou algum processo está causando o travamento do contêiner ao iniciar.

Ao iniciar o contêiner, certifique-se de iniciá-lo desanexado "-d" se for anexá-lo. (por exemplo, "docker run -d mediawiki_web_1")


Presumo que executar o contêiner usando docker-compose o desanexou de qualquer maneira, não? Ou o argumento -d está faltando em meu arquivo de configuração. vai verificar isso.
Balessan

4

tl; dr Ele está reiniciando com um código de status de 127, o que significa que falta um arquivo / biblioteca em seu contêiner. Começar um novo contêiner pode corrigir isso.

Explicação:

No que diz respeito ao meu entendimento do Docker, isso é o que está acontecendo:

  1. O contêiner tenta inicializar. No processo, ele tenta acessar um arquivo / biblioteca que não existe.
  2. Ele sai com um código de status de 127, que é explicado nesta resposta .
  3. Normalmente, é aqui que o contêiner deveria ter saído completamente, mas ele reinicia.
  4. Ele reinicia porque a política de reinicialização deve ter sido definida para algo diferente no( o padrão ), (usando o sinalizador de linha de comando --restartou a docker-compose.ymlchave restart) ao iniciar o contêiner.

Solução: algo pode ter corrompido seu contêiner. Idealmente, iniciar um novo recipiente deve fazer o trabalho.


2

Esse também pode ser o caso se você tiver criado um systemdserviço que tem:

[Service]
Restart=always
ExecStart=/usr/bin/docker container start -a my_container
ExecStop=/usr/bin/docker container stop -t 2 my_container

1

No meu caso, o contêiner nginx estava reiniciando continuamente, verifiquei os logs do contêiner nginx e descobri que os arquivos .crt e .key de um domínio não exigido estavam com erros, então removi os respectivos arquivos .conf, .crt e .key e reiniciei nginx. É isso o nginx está funcionando bem sem reiniciar.


0

Eu tinha esquecido o Minikube rodando em background e isso é o que sempre os reiniciava de volta



0

Tente adicionar estes parâmetros ao seu arquivo docker yml

restart: "no"
  restart: always
  restart: on-failure
  restart: unless-stopped
  environment:
    POSTGRES_DB: "db_name"
    POSTGRES_HOST_AUTH_METHOD: "trust"

O arquivo final deve ser parecido com este

postgres:
  restart: "no"
  restart: always
  restart: on-failure
  restart: unless-stopped
  image: postgres:latest
  volumes:
    - /data/postgresql:/var/lib/postgresql
  ports:
    - "5432:5432"
  environment:
    POSTGRES_DB: "db_name"
    POSTGRES_HOST_AUTH_METHOD: "trust"
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.