[docker] Docker 프로세스에서 어떻게 연결 및 분리합니까?
도커 프로세스에 연결할 수 있지만 Ctrl+ c가 분리되지 않습니다. exit
기본적으로 프로세스를 중단합니다.
프로세스를 실행하고 때때로 변경하여 변경 한 다음 분리하는 데 권장되는 워크 플로우는 무엇입니까?
답변
쉘을 종료하지 않고 청각 장애를 분리하려면, 이스케이프 시퀀스 사용 Ctrl+ P뒤에 Ctrl+를 Q. 자세한 내용은 여기를 참조 하십시오 .
이 출처의 추가 정보 :
- docker run -t -i →
^P^Q
docker attach 로 분리했다 가 다시 부착 가능 - docker run -i →로 분리 할 수 없습니다
^P^Q
. stdin을 방해합니다 - 도커 실행 →
^P^Q
; 으로 분리 할 수 없습니다 . SIGKILL 클라이언트 수 있습니다; 도커 부착으로 다시 부착 가능
답변
답변
파일을 수정하거나 프로세스를 검사하려는 경우 원하는 다른 솔루션이 있습니다.
다음 명령을 실행하여 기존 컨테이너에서 새 프로세스를 실행할 수 있습니다.
sudo docker exec -ti [CONTAINER-ID] bash
bash 셸을 사용하여 새 프로세스를 시작하면 Ctrl+로 C직접 벗어날 수 있으며 원래 프로세스에는 영향을 미치지 않습니다.
답변
나는 이것이 상황에 달려 있다고 생각합니다. 다음 컨테이너를 예로 들어보십시오.
# 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>
답변
컨테이너에서 분리하려면 간단히 잡고 +를 Ctrl누릅니다 .PQ
사용중인 컨테이너에 연결하려면 다음을 수행하십시오.
$ docker container attach "container_name"