Eu sou completamente um novato no docker. Tentei iniciar um contêiner encerrado como segue,
Eu listei todos os recipientes disponíveis usando
docker ps -a
. Ele listou o seguinte:Entrei nos seguintes comandos para iniciar o container que está no estágio de saída e entrar no terminal daquela imagem.
docker start 79b3fa70b51d docker exec -it 79b3fa70b51d /bin/sh
Ele está gerando o seguinte erro.
FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running
Mas quando eu começo o contêiner usando docker start 79b3fa70b51d
. Ele lança o ID do contêiner como saída, o que é normal se tudo estiver funcionando normalmente. Não tenho certeza do que causa esse erro. Qualquer ideia sobre as causas e sugestões sobre isso seria muito útil para mim. Desde já, obrigado.
docker
docker-container
Desconhecido
fonte
fonte
Respostas:
O contêiner
79b3fa70b51d
parece fazer apenas umecho
.Isso significa que ele inicia, ecoa e sai imediatamente.
O próximo
docker exec
comando não o encontraria em execução para se anexar a esse contêiner e executar qualquer comando: é tarde demais. O contêiner já saiu.fonte
docker run -it --rm udhayakumar/busyboxwithtouch
deve ser o suficiente para abrir uma sessão. O ponto de entrada padrão deve ser / bin / sh, mas depende do seu Dockerfile: você pode ter definido um ponto de entrada diferente e / ou um CMD diferente.docker exec
) anexar a ele.Por padrão, o docker container sairá imediatamente se você não tiver nenhuma tarefa em execução no container.
Para manter o contêiner em execução em segundo plano, tente executá-lo com o argumento
--detach
(ou-d
).Por exemplo:
fonte
Se não for possível reiniciar o processo principal (por tempo suficiente), também existe a possibilidade de
commit
o contêiner para uma nova imagem e executar um novo contêiner a partir dessa imagem. Embora este não seja o fluxo de trabalho de prática recomendada usual , acho realmente útil depurar um script com falha de vez em quando.fonte
bash
processo no contêiner. Você provavelmente já teve um servidor da web rodando antes, então terá que verificar qual comando precisa ser usado para trazer o servidor de volta.Em primeiro lugar, temos que iniciar o contêiner docker
Depois disso, verifique o contêiner do docker:
Em seguida, execute usando o comando abaixo:
fonte
Este é normalmente o caso com a maioria das imagens básicas do sistema operacional (centos, debian, etc.), ou também com as imagens de nós .
Sua melhor aposta é rodar a imagem no modo interativo . Exemplo abaixo com a imagem do nó :
A saída é
root@cacc7897a20c:/# echo $SHELL /bin/bash
fonte
Aqui está o que funcionou para mim.
Obtenha o ID do contêiner e reinicie.
fonte
A razão é exatamente o que disse a resposta aceita. Acrescento algumas informações extras, que podem fornecer um melhor entendimento sobre este assunto.
Created
,Running
,Stopped
,Exited
,Dead
e outros como eu sei.docker create
, o daemon do docker criará um contêiner com seu status deCreated
.docker start
, o docker daemon iniciará um contêiner existente, cujo status pode serCreated
ouStopped
.docker run
, o daemon do docker o terminará em duas etapas:docker create
edocker start
.docker stop
, obviamente, o daemon do docker irá parar um contêiner. Assim, o contêiner estaria emStopped
status.Exited
.Quando o processo termina? Em outras palavras, qual é o processo, como o iniciamos?
A resposta está
CMD
em um dockerfile oucommand
na seguinte expressão, que é obash
padrão em algumas imagens, ou seja, ubutu: 18.04.fonte
Isso foi postado por L0j1k no post abaixo e funcionou para mim.
Como entro no shell de um contêiner do Docker?
fonte
Para qualquer um que tente algo semelhante usando um Dockerfile ...
Executar em modo separado não ajudará. O contêiner sempre sairá (parará de funcionar) se o comando não for bloqueador, esse é o caso do bash.
Nesse caso, uma solução alternativa seria: 1. Confirme a imagem resultante: (container_name = o nome do contêiner no qual deseja basear a imagem, image_name = o nome da imagem a ser criada docker commit container_name image_name 2. Use docker run para criar um novo contêiner usando a nova imagem, especificando o comando que você deseja executar. Aqui, irei executar "bash": docker run -it image_name bash
Isso forneceria o login interativo que você está procurando.
fonte
docker run -it <image_id> /bin/bash
Executar no modo interativo executando o shell bash
fonte
-d
bandeira é um erro de digitação aqui?Esta é uma solução quando o contêiner do docker sai normalmente e você pode editar o Dockerfile.
Geralmente, quando um contêiner docker é executado, um aplicativo é servido executando um comando. Na referência do Dockerfile ,
Quando você constrói uma imagem e não especifica nenhum comando com CMD ou ENTRYPOINT, o comando CMD ou ENTRYPOINT da imagem base seria executado.
Por exemplo, o Dockerfile oficial do Ubuntu tem
CMD ["/bin/bash"]
( https://hub.docker.com/_/ubuntu ). Agora, obin/bash/
comando pode aceitar a entrada e odocker run -it IMAGE_ID
comando anexa STDIN ao contêiner. O resultado é que você obtém um terminal interativo e o contêiner continua em execução.Quando um comando com CMD ou ENTRYPOINT é especificado no Dockerfile, esse comando é executado ao executar o contêiner. Agora, se este comando puder terminar sem exigir nenhuma entrada, ele será concluído e o contêiner será encerrado.
docker run -it IMAGE_ID
vai NÃO fornecer o terminal interativo neste caso. Um exemplo seria a imagem docker construída a partir do Dockerfile abaixoSe você precisar ir para o terminal desta imagem, você precisará manter o contêiner em execução modificando o comando entrypoint.
Depois de executar o contêiner normalmente com
docker run IMAGE_ID
, você pode simplesmente ir para outro terminal e usardocker exec -it CONTAINER_ID bash
para obter o terminal do contêiner.fonte
No meu caso, alterei certos nomes de arquivo e nomes de diretório do diretório pai do Dockerfile. Devido a que o container não encontrou os parâmetros necessários para reiniciá-lo.
Depois de renomear de volta para os nomes originais, o contêiner começou como manteiga.
fonte
Eu tenho uma opinião diferente sobre isso. Pude fazer um
docker ps
e ver que há um contêiner do docker em execução, até tentei reiniciá-lo, mas assim que tentasse obter uma sessão para ele com oNew-PSSession -ContainerId $containerId -RunAsAdministrator
It dava um erro, dizendo:Meu problema era que eu estava executando o serviço de rede e ele não tinha permissões suficientes para ver o contêiner, embora eu tivesse concedido a ele permissões para executar comandos do docker (com configuração do grupo de segurança do docker)
Eu não sabia como habilitar o trabalho com contêineres, então tive que voltar a executá-lo como um usuário administrador
fonte