No Docker 1.1.2 (mais recente), qual é a maneira correta de desanexar de um contêiner sem pará-lo?
Por exemplo, se eu tentar:
docker run -i -t foo /bin/bash
oudocker attach foo
(para o contêiner já em execução)
sendo que ambos me levam a um terminal no contêiner, como saio do terminal do contêiner sem pará-lo?
exit
e CTR+C
ambos param o contêiner.
Respostas:
Update: Como mencionado em abaixo respostas Ctrl+ p, Ctrl+ qvai agora voltar modo interativo em modo daemon.
O poço Ctrl+ C(ou Ctrl+ \) deve desconectá-lo do contêiner, mas o mata porque o processo principal é um bash.
Uma pequena lição sobre estivador. O contêiner não é um sistema operacional totalmente funcional. Quando você executa um contêiner, o processo iniciado pega o PID 1 e assume o poder init. Portanto, quando esse processo é encerrado, o daemon para o contêiner até que um novo processo seja iniciado (via docker start) (Mais explicações sobre o assunto http://phusion.github.io/baseimage-docker/#intro )
Se você deseja um contêiner que é executado no modo desanexado o tempo todo, sugiro que você use
Com um servidor ssh no contêiner. (a maneira mais fácil é seguir o tutorial do dockerizing openssh https://docs.docker.com/engine/examples/running_ssh_service/ )
Ou você pode simplesmente reiniciar seu contêiner via
(será desanexado por padrão)
fonte
-ti -d
, depois anexe com edocker attach
, em seguida, desanexe com primeiro ctrl + pe depois ctrl + q. Eu pensei, eu poderia usar apenas um dos atalhos do teclado.Digite Ctrl+ pe Ctrl+ q. Isso ajudará você a ativar o modo interativo para o modo daemon.
Consulte https://docs.docker.com/v1.7/articles/basics/#running-an-interactive-shell .
fonte
Eu investiguei isso e todas as respostas acima estão parcialmente certas. Tudo depende de como o contêiner é lançado. Tudo se resume ao seguinte quando o contêiner foi iniciado:
-t
)-i
)^P^Q
funciona, MAS apenas quando-t
e-i
é usado para iniciar o contêiner:ctrl+c
funciona, MAS apenas quando-t
( sem-i
) é usado para iniciar o contêiner:A terceira maneira de desanexar
Existe uma maneira de desconectar sem matar o contêiner; você precisa de outro shell. Em resumo, executar isso em outro shell desanexado e deixou o contêiner em execução
pkill -9 -f 'docker.*attach'
:Por quê? Porque você está matando o processo que o conectou ao contêiner, não ao contêiner em si.
fonte
kill -9
sinal não. O processo é encerrado e não tem recurso. Meu palpite é que outros sinais dão ao contêiner a chance de desligar, enquanto-9
não.Se você "encaixa" a ID do contêiner, entra no contêiner.Para sair do contêiner sem parar o contêiner, é necessário inserir Ctrl+ P+Q
fonte
Error response from daemon: Container f560a0ad6806150b2775d0b6e6d5f7065a03775bae858fb4fb7df05a277976db is not running
Considero a resposta de Ashwin a mais correta, minha antiga resposta está abaixo.
Eu gostaria de adicionar outra opção aqui, que é executar o contêiner da seguinte maneira
Você pode entrar no contêiner e executar o bash com
Não é necessário instalar o sshd :)
fonte
docker attach
que seria mais padrão, reconectando à primeira execução do bash.docker exec
também funciona aqui, no entanto, cria um novo processo de bash além do primeiro. Certamente, o processo é criado dentro do mesmo contexto / ambiente / contêiner do primeiro, porém é diferente (uma analogia seria abrir uma nova guia de terminal no seu emulador de terminal favorito).A maneira padrão de desanexar de um contêiner interativo é Ctrl+ P Ctrl+ Q, mas você pode substituí-lo ao executar um novo contêiner ou anexá-lo a um contêiner existente usando o sinalizador --detach-keys .
fonte
Se você se conectou
docker attach
, é possível desconectar matando o processo de conexão da janela de encaixe. A melhor maneira é usar o parâmetro sig-proxy para evitar passar o Ctrl + C para o seu contêiner:A mesma opção está disponível para o
docker run
comando.fonte
php:7.3-apache
Se você quiser apenas ver a saída do processo em execução no contêiner, faça um simples
docker container logs -f <container id>
.O
-f
sinalizador faz com que a saída do contêiner sejafollowed
atualizada em tempo real. Muito útil para depuração ou monitoramento.fonte
Você pode usar a
--detach-keys
opção ao executardocker attach
para substituir o padrão CTRL+ P, CTRL+Q sequência (que nem sempre funciona).Por exemplo, quando você executa
docker attach --detach-keys="ctrl-a" test
e pressiona CTRL+A , sai do contêiner sem matá-lo.Outros exemplos:
docker attach --detach-keys="ctrl-a,x" test
- pressioneCTRL+A
e depoisX
para sairdocker attach --detach-keys="a,b,c" test
- pressioneA
, eB
depoisC
para sairExtrato da documentação oficial:
Se desejar, você pode configurar uma substituição da sequência de teclas do Docker para desanexar. Isso é útil se a sequência padrão do Docker entrar em conflito com a sequência de teclas usada para outros aplicativos. Há duas maneiras de definir sua própria sequência de chaves de desanexação, como uma substituição por contêiner ou como uma propriedade de configuração em toda a sua configuração.
Para substituir a sequência de um contêiner individual, use o
--detach-keys="<sequence>"
sinalizador com o comando docker attach. O formato do<sequence>
é uma letra[a-Z]
ou octrl-
combinado com qualquer um dos seguintes:Estes
a
,ctrl-a
,X
, ouctrl-\\
valores são exemplos de sequências de teclas válidas. Para configurar uma sequência de teclas padrão de configuração diferente para todos os contêineres, consulte Configuração seção Arquivo de .Nota: Isso funciona desde a janela de encaixe versão 1.10+ (no momento desta resposta, a versão atual é 18.03)
fonte
Postagem antiga, mas apenas saia e inicie novamente ... o problema é se você estiver em uma máquina Windows Ctrl p ou Ctrl P estão vinculadas à impressão ... sair do início do contêiner não deve prejudicar nada
fonte