도커 프로세스에 연결할 수 있지만 Ctrl+ c가 분리되지 않습니다. exit
기본적으로 프로세스를 중단합니다.
프로세스를 실행하고 때때로 변경하여 변경 한 다음 분리하는 데 권장되는 워크 플로우는 무엇입니까?
xterm
, konsole
등의 일을? 그것은 나를 위해 작동합니다 (분리됩니다).
도커 프로세스에 연결할 수 있지만 Ctrl+ c가 분리되지 않습니다. exit
기본적으로 프로세스를 중단합니다.
프로세스를 실행하고 때때로 변경하여 변경 한 다음 분리하는 데 권장되는 워크 플로우는 무엇입니까?
xterm
, konsole
등의 일을? 그것은 나를 위해 작동합니다 (분리됩니다).
답변:
쉘을 종료하지 않고 청각 장애를 분리하려면, 이스케이프 시퀀스 사용 Ctrl+ P뒤에 Ctrl+를 Q. 자세한 내용은 여기를 참조 하십시오 .
이 출처의 추가 정보 :
^P^Q
docker attach 로 분리했다 가 다시 부착 가능^P^Q
. stdin을 방해합니다^P^Q
; 으로 분리 할 수 없습니다 . SIGKILL 클라이언트 수 있습니다; 도커 부착으로 다시 부착 가능"detachKeys": "ctrl-a,a"
.docker / config.json 파일 또는 --detach-keys "ctrl-a,a"
명령 줄에서 attach 등을 사용하여 구성 가능한 분리 키를 설정할 수 있습니다 .
Ctrl + Z
분리하지 않습니다. 프로세스를 배경으로합니다. 분리와 같지 않으며 성능이 저하됩니다.
docker run -ti --sig-proxy=false busybox top
작동하지 않는 것처럼 보이지만 프로세스는 ctrl-c로 종료되지만 시작 docker run -t -sig-proxy=false busybox top
하면 작동 하는 것처럼 보이며 ctrl-c로 종료 할 수 있습니다.
Ctrl-c
컨테이너도 멈 춥니 다.
파일을 수정하거나 프로세스를 검사하려는 경우 원하는 다른 솔루션이 있습니다.
다음 명령을 실행하여 기존 컨테이너에서 새 프로세스를 실행할 수 있습니다.
sudo docker exec -ti [CONTAINER-ID] bash
bash 셸을 사용하여 새 프로세스를 시작하면 Ctrl+로 C직접 벗어날 수 있으며 원래 프로세스에는 영향을 미치지 않습니다.
exec
있습니다.
나는 이것이 상황에 달려 있다고 생각합니다. 다음 컨테이너를 예로 들어보십시오.
# docker run -it -d ubuntu
91262536f7c9a3060641448120bda7af5ca812b0beb8f3c9fe72811a61db07fc
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91262536f7c9 ubuntu "/bin/bash" 5 seconds ago Up 4 seconds serene_goldstine
(1) " docker attach
"를 사용하여 용기를 부착하십시오.
" docker attach
" 는 새 tty를 할당 하지 않지만 원래 실행중인 tty를 재사용하므로 exit
명령 을 실행하면 실행 중인 컨테이너가 종료됩니다.
# docker attach 91262536f7c9
exit
exit
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91262536f7c9 ubuntu "/bin/bash" 39 minutes ago Exited (0) 3 seconds ago serene_goldstine
따라서 실제로 컨테이너 종료를 실행하지 않으려면 Ctrl+ p+ Ctrl+ 를 사용해야합니다 q.
(2) " docker exec
" 사용
" docker exec
" 가 새로운 tty 를 할당하므로 + + + exit
대신 사용해야한다고 생각합니다 . CtrlpCtrlq
다음은 컨테이너를 종료하기 위해 Ctrl+ p+ Ctrl+ q를 실행하는 것입니다 .
# docker exec -it 91262536f7c9 bash
root@91262536f7c9:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18160 1908 ? Ss+ 04:03 0:00 /bin/bash
root 15 0.0 0.0 18164 1892 ? Ss 04:03 0:00 bash
root 28 0.0 0.0 15564 1148 ? R+ 04:03 0:00 ps -aux
root@91262536f7c9:/# echo $$
15
그런 다음 로그인 컨테이너를 다시 사용하면 bash
이전 docker exec
명령 의 프로세스 가 여전히 활성 상태 임을 알 수 있습니다 (PID는 15 임).
# docker exec -it 91262536f7c9 bash
root@91262536f7c9:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18160 1908 ? Ss+ 04:03 0:00 /bin/bash
root 15 0.0 0.0 18164 1892 ? Ss+ 04:03 0:00 bash
root 29 0.0 0.0 18164 1888 ? Ss 04:04 0:00 bash
root 42 0.0 0.0 15564 1148 ? R+ 04:04 0:00 ps -aux
root@91262536f7c9:/# echo $$
29
실행중인 컨테이너에서 분리하기 위해 사용 ^P^Q(홀드 Ctrl를 눌러 P눌러 Q, 릴리스 Ctrl).
캐치가있다 : 컨테이너가 시작되었다있을 경우에만 작동 모두 -t
와 -i
.
이러한 옵션 중 하나 (또는 둘 다)없이 시작된 실행중인 컨테이너가 있고로 연결하는 docker attach
경우 분리 할 다른 방법을 찾아야합니다. 선택한 옵션과 실행중인 프로그램에 따라 ^C작동하거나 전체 컨테이너가 종료 될 수 있습니다. 실험해야합니다.
또 다른 캐치 : 사용중인 프로그램에 따라 터미널, 셸, SSH 클라이언트 또는 멀티플렉서가 ^P또는 ^Q(보통 후자)를 가로 챌 수 있습니다 . 이것이 문제인지 테스트하려면 --detach-keys z
인수로 실행하거나 첨부하십시오 . 이제 z수정자를 사용하지 않고을 눌러 분리 할 수 있습니다 . 이것이 작동하면 다른 프로그램이 방해하는 것입니다. 이 문제를 해결하는 가장 쉬운 방법 은 인수를 사용 하여 고유 한 분리 시퀀스 를 설정하는 것--detach-keys
입니다. (예를 들어로 종료 ^K하려면을 사용하십시오 --detach-keys 'ctrl-k'
.) 또는 터미널 또는 기타 간섭 프로그램에서 키 차단을 비활성화 할 수 있습니다. 예를 들어, stty start ''
또는 stty start undef
가로채는 단말 못할 수도^Q 일부 POSIX 시스템에서는 이것이 도움이되지 않습니다.
아무것도 작동하지 않으면 새 터미널 을 열고 다음을 수행하십시오.
$ ps aux | grep attach
username <pid_here> .............. 0:00 docker attach <CONTAINER_HASH_HERE>
username <another_pid> .............. 0:00 grep --color=auto attach
$ kill -9 <pid_here>
-9
필요하지 않았습니다.
docker attach
부모를하지.
나는 동일한 문제가 있었다 ctrl- P그리고 Q작동하지 않을 것입니다,도 ctrl- C결국 나는 다른 터미널 세션을 열고 나가 "고정 표시기 정지했다 ... containerid "와 "고정 표시기 시작 containerid를 "하고 작업이 완료되었다. 기묘한.
--rm
플래그로 컨테이너를 시작하면 작동하지 않습니다 . Ctrl+P
그리고 Ctrl+Q
당신이 컨테이너 시작하면 작동 -it
플래그.
docker ps
docker kill ${containerId}
같은 문제가 발생한 사람은 분리 키를 설정할 때도 컨테이너를 죽이지 않고 분리 할 수 없습니다 ...
컨테이너를 시작할 때 docker-compose up -d
docker attach {container name}
광미 로그를 보는 데 사용 하는 대신 ....
시도 docker-compose logs -f {service name}
ctrl- c컨테이너를 죽이지 않고 로그 꼬리를 죽인다
{service name}
docker-compose.yml 파일 옆에 나열된 서비스 인 경우 (예 : 컨테이너 이름 = elk_logstash_1-> service name = logstash
HTH
컨테이너 문제를 해결하기 위해 일반적으로 docker attach를 사용하여 STDOUT이 무엇을 표시했는지 확인했습니다. 방금 docker logs --follow 621a4334f97b
컨테이너 작업에 영향을 미치지 않고 Ctrl + c를 사용할 수있는 동안 STDOUT을 볼 수있게되었습니다! 내가 항상 원했던 것입니다.
... 자연스럽게 컨테이너 ID를 대체해야합니다.
컨테이너를 계속 실행하고 싶었지만 컨테이너를 시작하지 않고 첨부했습니다 -it
. 내 솔루션은 대신 SSH 연결을 희생하는 것이 었습니다 (컨테이너를 실행하는 시스템에 SSH로 연결되었으므로). 그 ssh 세션을 죽이면 컨테이너가 그대로 남았지 만 컨테이너에서 분리되었습니다.