Posso anexar a um processo de janela de encaixe, mas o Ctrl+ cnão funciona para desanexá-lo. exit
basicamente interrompe o processo.
Qual é o fluxo de trabalho recomendado para executar o processo, anexando-o ocasionalmente a ele para fazer algumas alterações e depois desanexando?
xterm
,konsole
etc. trabalho? Funciona para mim (fico desapegado).Respostas:
Para desanexar o tty sem sair do shell, use a sequência de escape Ctrl+ Pseguida por Ctrl+ Q. Mais detalhes aqui .
Informações adicionais desta fonte :
^P^Q
e reconectado com o docker^P^Q
; vai atrapalhar stdin^P^Q
; pode cliente SIGKILL; pode reconectar com o dockerfonte
"detachKeys": "ctrl-a,a"
em seu arquivo .docker / config.json ou--detach-keys "ctrl-a,a"
na linha de comando com anexar etc.Ctrl + Z
não se destaca; apenas embasa o processo. Não é o mesmo que desanexar e acarreta uma penalidade de desempenho.Confira também a
--sig-proxy
opção :Em seguida, use CTRL+ cpara desanexar
fonte
docker run -ti --sig-proxy=false busybox top
que não parece trabalho, o processo é morto com ctrl-c, mas começando comdocker run -t -sig-proxy=false busybox top
parecia de trabalho e permitir que parar com ctrl-cCtrl-c
irá parar o recipiente também.Se você quiser apenas fazer alguma modificação nos arquivos ou inspecionar processos, aqui está uma outra solução que você provavelmente deseja.
Você pode executar o seguinte comando para executar um novo processo a partir do contêiner existente:
sudo docker exec -ti [CONTAINER-ID] bash
iniciará um novo processo com o bash shell e você poderá escapar dele diretamente Ctrl+ C, pois isso não afetará o processo original.
fonte
exec
não é.Acho que isso deve depender da situação.Tome o seguinte contêiner como exemplo:
(1) Use "
docker attach
" para prender o recipiente:Como "
docker attach
" não alocará um novo tty, mas reutilize o tty em execução original, portanto, se você executar oexit
comando, ele causará a saída do contêiner em execução:Portanto, a menos que você realmente queira fazer a saída do contêiner em execução, use Ctrl+ p+ Ctrl+ q.
(2) Use "
docker exec
"Uma vez que "
docker exec
" irá alocar um novo tty, então eu acho que você deve usarexit
em vez de Ctrl+ p+ Ctrl+ q.A seguir está executando Ctrl+ p+ Ctrl+ qpara sair do contêiner:
Em seguida, faça o login no contêiner novamente e você verá que o
bash
processo emdocker exec
comando preventivo ainda está ativo (o PID é 15):fonte
Para desconectar de um contêiner em execução, use ^P^Q(mantenha Ctrlpressionado P, pressione Q, pressione , solte Ctrl).
Existe um problema: isso só funciona se o contêiner foi iniciado com ambos
-t
e-i
.Se você tiver um contêiner em execução iniciado sem uma (ou ambas) dessas opções e se conectar
docker attach
, precisará encontrar outra maneira de desanexar. Dependendo das opções que você escolheu e do programa em execução, ^Cpode funcionar ou pode matar o contêiner inteiro. Você terá que experimentar.Outro problema: dependendo dos programas que você está usando, seu terminal, shell, cliente SSH ou multiplexador pode estar interceptando um ^Pou ^Q(geralmente o último). Para testar se esse é o problema, tente executar ou anexar ao
--detach-keys z
argumento. Agora você deve conseguir desconectar pressionando z, sem nenhum modificador. Se isso funcionar, outro programa está interferindo. A maneira mais fácil de contornar isso é definir sua própria sequência de desanexação usando o--detach-keys
argumento (Por exemplo, para sair com ^K, use--detach-keys 'ctrl-k'
.) Como alternativa, você pode tentar desativar a interceptação das chaves no seu terminal ou em outro programa interferente. Por exemplo,stty start ''
oustty start undef
pode impedir que o terminal intercepte^Q em alguns sistemas POSIX, embora eu não tenha achado isso útil.fonte
quando nada mais funcionar, abra um novo terminal :
fonte
-9
não era necessário.docker attach
e não seu pai.Para desconectar do contêiner, basta segurar Ctrle pressionar P+ Q.
Para anexar a um contêiner em execução, use:
fonte
Eu tinha o mesmo problema ctrl- Pe Qnão funcionaria, nem ctrl- C... finalmente abri outra sessão do terminal e fiz "docker stop containerid " e "docker start containerid " e ele fez o trabalho. Esquisito.
fonte
--rm
sinalizador.Ctrl+P
eCtrl+Q
funciona se você iniciou o contêiner com-it
sinalizador.No mesmo shell, segure ctrlas teclas chave e de imprensa p, em seguida,q
fonte
-it
sinalizador.Estou em um Mac e, por algum motivo, Ctrl- p Ctrl- qsó funcionaria se eu também mantivesseShift
fonte
docker ps
docker kill ${containerId}
fonte
para interromper um processo do docker e liberar as portas, primeiro use ctrl- cpara sair do contêiner e use o docker ps para encontrar a lista de contêineres em execução. Em seguida, você pode usar a parada do contêiner do docker para interromper esse processo e liberar suas portas. O nome do contêiner que você pode encontrar no comando docker ps, que fornece o nome na coluna name. Espero que isso resolva suas dúvidas ....
fonte
Se você apenas precisar que o processo do docker seja executado em segundo plano, poderá usar
Ctrl + Z
Esteja ciente de que não é um desapego real e vem com uma penalidade de desempenho. (Você pode retorná-lo ao primeiro plano com o
bg
comando).Outra opção é fechar o terminal, se você não precisar mais dele.
fonte
Para quem encontrou o mesmo problema que eu (não é possível desanexar sem matar o contêiner, mesmo ao definir a chave de desanexação) ......
Ao iniciar seus contêineres com
docker-compose up -d
em vez de usar
docker attach {container name}
para exibir o log de rejeição ....try
docker-compose logs -f {service name}
ctrl- cmata a cauda do log sem matar seu contêiner{service name}
sendo o serviço listado ao lado do seu arquivo docker-compose.yml .. (por exemplo, enquanto nome do contêiner = elk_logstash_1 -> nome do serviço = logstashHTH
fonte
Atualizar
Normalmente, eu usei o docker attach para ver o que o STDOUT estava exibindo, para solucionar problemas de contêineres. Acabei de encontrar
docker logs --follow 621a4334f97b
, o que me permite ver o STDOUT, além de poder ctrl + c sem afetar a operação do contêiner! Exatamente o que eu sempre quis.... naturalmente, você precisará substituir em seu próprio ID de contêiner.
Resposta original
Eu queria deixar o contêiner em execução, mas o tinha anexado sem iniciar o contêiner
-it
. Minha solução foi sacrificar minha conexão SSH (já que eu estava com SSH na máquina que estava executando os contêineres). Matar essa sessão ssh deixou o contêiner intacto, mas me destacou dele.fonte