[docker] Docker 프로세스에서 어떻게 연결 및 분리합니까?

도커 프로세스에 연결할 수 있지만 Ctrl+ c가 분리되지 않습니다. exit기본적으로 프로세스를 중단합니다.

프로세스를 실행하고 때때로 변경하여 변경 한 다음 분리하는 데 권장되는 워크 플로우는 무엇입니까?



답변

쉘을 종료하지 않고 청각 장애를 분리하려면, 이스케이프 시퀀스 사용 Ctrl+ P뒤에 Ctrl+를 Q. 자세한 내용은 여기를 참조 하십시오 .

이 출처의 추가 정보 :

  • docker run -t -i → ^P^Qdocker attach 로 분리했다 가 다시 부착 가능
  • docker run -i →로 분리 할 수 ​​없습니다 ^P^Q. stdin을 방해합니다
  • 도커 실행 → ^P^Q; 으로 분리 할 수 ​​없습니다 . SIGKILL 클라이언트 수 있습니다; 도커 부착으로 다시 부착 가능

답변

또한 체크 아웃 옵션 :--sig-proxy

docker attach --sig-proxy=false 304f5db405ec

그런 다음 CTRL+ c를 사용 하여 분리


답변

파일을 수정하거나 프로세스를 검사하려는 경우 원하는 다른 솔루션이 있습니다.

다음 명령을 실행하여 기존 컨테이너에서 새 프로세스를 실행할 수 있습니다.

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"