도커의 공정에서 탈부착은 어떻게 합니까?
도커 프로세스에 부착할 수는 있지만 +C는 도커 프로세스에서 분리되지 않습니다.exit기본적으로 프로세스를 중단합니다.
프로세스를 실행하고, 때때로 프로세스에 연결하여 일부 변경 사항을 적용한 후 분리하는 데 권장되는 워크플로우는 무엇입니까?
셸에서 빠져나오지 않고 tty를 분리하려면 탈출 시퀀스 P+ 뒤에 +를 사용합니다.Q자세한 내용은 여기.
이 소스의 추가 정보:
- 는 도커 run -t -i 는할 수 .
^P^Q로 합니다. - 는 -i (를) 와 할 수 .
^P^Q; stdin 입니다를 입니다. - 은(는) (를) 와(와) 할 수 없습니다.
^P^Q, can SIGKIL ;
다음 옵션도 확인해 보십시오.
docker attach --sig-proxy=false 304f5db405ec
그런 다음 +C를 사용하여 분리합니다.
파일을 수정하거나 프로세스를 검사하려는 경우, 원하는 다른 솔루션이 있습니다.
다음 명령을 실행하여 기존 컨테이너에서 새 프로세스를 실행할 수 있습니다.
sudo docker exec -ti [CONTAINER-ID] bash
bash shell을 사용하여 새 프로세스를 시작하고 C+로 직접 탈출할 수 있습니다. 원래 프로세스에 영향을 주지 않습니다.
실행 중인 컨테이너에서 분리하려면 (hold, press, press, press, release)를 사용합니다.
문제점이 있습니다. 컨테이너가 두 개로 시작된 경우에만 작동한다는 것입니다. -t그리고.-i.
중 둘 () 와 함께 docker attach, 분리할 다른 방법을 찾아야 할 겁니다선택한 옵션과 실행 중인 프로그램에 따라 작동하거나 컨테이너 전체가 사라질 수 있습니다.당신은 실험을 해봐야 할 것입니다.
또 다른 문제점: 사용 중인 프로그램에 따라 단말기, 셸, SSH 클라이언트 또는 멀티플렉서가 가로채거나(보통 후자) 가로채는 수 있습니다.이것이 문제인지 테스트하려면 실행하거나 를 사용하여 연결해 보십시오.--detach-keys z논쟁.이제 수식어 없이 를 눌러 분리할 수 있습니다.이것이 작동하면 다른 프로그램이 방해를 받는 것입니다.이 문제를 해결하는 가장 쉬운 방법은 사용자 자신의 분리 순서를 설정하는 것입니다.--detach-keysargument. (예를 들어, 를 사용하여 종료하려면)--detach-keys 'ctrl-k'.) 또는 단말기 또는 기타 간섭 프로그램에서 키 가로채기를 비활성화할 수 있습니다.예를들면,stty start ''아니면stty start undef일부 POSIX 시스템에서 터미널이 가로채는 것을 막을 수 있습니다. 하지만 이것이 도움이 된다는 것을 발견하지 못했습니다.
이것은 상황에 따라 달라져야 한다고 생각합니다.다음 컨테이너를 예로 들어보겠습니다.
# 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" nutty를 할당하지 않고 원래의 running 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
따라서 실행 중인 컨테이너 출구를 꼭 만들고 싶지 않다면 P+ + 를 사용해야 합니다.Q
(2) 사용"docker exec"
"이후로.docker exec" 새티를 할당할테니 당신이 사용해야 할 것 같습니다.exit+PQ + + 대신에
다음은 + P+ + 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
다른 방법이 없으면 새 터미널을 열고 다음 작업을 수행합니다.
$ 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>
용기에서 분리하려면 +를 누른 채로 기다리기만 하면 됩니다.
사용하는 실행 중인 컨테이너에 연결하는 방법:
$ docker container attach "container_name"
저도 같은 문제가 있어서 P+로 작동하지 않을 뿐만 아니라 +C로 작동하지도 않습니다.결국 저는 다른 터미널 세션을 열었고 "docker stop containerid"와 "docker start containerid"를 수행했고 작업이 완료되었습니다.이상하다.
갱신하다
저는 보통 컨테이너 문제 해결을 위해 STDOUT가 무엇을 표시하는지 보기 위해 도커 부착을 사용했습니다.방금 발견했습니다.docker logs --follow 621a4334f97b, STDOUT을 볼 수 있게 해주는 동시에 컨테이너 작동에 영향을 주지 않고 ctrl+coff 할 수 있게 해줍니다.내가 항상 원했던 바로 그 것.
... 당연히 본인의 컨테이너 ID로 대체해야 합니다.
원답
싶었지만, 를 시동하지 -it이 제 대신 SSH 연결을 희생하는 것이 제 해결책이었습니다(컨테이너를 실행 중인 시스템에 SSH를 넣었으므로).그 ssh 세션을 죽인 건 컨테이너를 그대로 두었지만 날 거기서 떼어냈습니다
같은 셸에서 키를 누른 채 키를 누릅니다.
동일한 문제에 부딪힌 사람들을 위해 나는 (분리 키를 설정할 때에도 컨테이너를 죽이지 않고는 분리할 수 없음) ...
를 로 할 때docker-compose up -d
docker attach {container name}미행 기록을 보다
해 보다docker-compose logs -f {service name} Ctrl+컨테이너를 죽이지 않고 로그 테일을 Ctrl죽입니다C.
{service name}도커- compose.yml 파일 안에 나열된 서비스입니다.(예: 컨테이너명=elk_logstash_1 -> 서비스명=logstash
저는 맥을 사용하고 있는데, 어떤 이유에서인지는..pq 저도 마찬가지여야만 작동할 것입니다.
- 새 터미널 열기
- 중인 ID를 .
docker ps - 합니다를 .
docker kill ${containerId}
탈부착에 관한 서류는 조금 복잡했습니다.
다른 단말기에서 컨테이너를 시동하고 부착하는 여러 가지 방법을 시도했습니다.다음 표는 결과를 요약한 것입니다.
다음과 같은 열 뜻이 있습니다.
-d-입니다입니다.docker run -d중고인지 아닌지--sig-proxy-입니다입니다.docker attach --sig-proxy=true|false예전에는 안 하던--no-stdin-입니다입니다.docker attach [--no-stdin]예전에는 안 하던keys--^C가 - 를 때 한 일Ctrl+C^P ^Q가 - 를 때 한 일Ctrl+P Ctrl+Q
몇 가지 발견 사항이 있습니다.
에 않습니다.
-doption)-i그리고.-t하는 방법 (: ))을 할 수 .
docker attach --sig-proxy=false할 수 , 연결 수 다.)다단,다).--sig-proxy=true)분리는 실행 옵션에 따라 다르며 세 가지 방법으로 수행할 수 있습니다.
docker run [-i|-t]다로 합니다.docker attach --sig-proxy=false CONT-> ->Ctrl+Cdocker run -it다로 합니다.docker attach-> ->Ctrl+P Ctrl+Qdocker run -it다로 합니다.docker attach --no-stdin-> ->Ctrl+C
(물론 컨테이너 이름이나 이미지와 같은 명령에 필요한 다른 인수를 제공해야 합니다.)
시나리오를 했습니다. 저는 다른 시나리오를 사용해 보았습니다.-i그리고.-t(그들 중 한 명만) 하지만 행동의 차이를 알아내지 못했습니다.은 다음과 합니다를 @ken-cochrane.
도커 런 -i →은(는) ^P^Q로 분리할 수 없으므로 stdin을 중단합니다.
하지만 전 이걸 재현하는 데 성공하지 못했습니다
--sig-proxy=false 메서드가 작동하지 않는 경우 다음을 사용하여 이스케이프 시퀀스를 변경할 수도 있습니다.
docker attach --detach-keys="<sequence>" <container_name or id>
예를 들어 "ctrl-c"를 사용하여 컨테이너를 분리한 다음 다음을 사용하여 컨테이너를 부착할 수 있습니다.
docker attach --detach-keys="ctrl-c" <container_name or id>
의 형식은 문자 [a-Z] 또는 다음 중 하나와 결합된 ctrl-입니다.
- a-z (단일 소문자 알파벳 문자)
- @ (표지판에서)
- [ (왼쪽 브라켓)
- \ (뒤로 슬래시 2개)
- _ (밑줄)
- ^ (caret)
자세한 내용은 -> 분리 시퀀스 재정의를 참조하십시오.
도커 프로세스를 중지하고 포트를 해제하려면 먼저 사용 c- 컨테이너 출구를 떠난 다음 도커ps를 사용하여 실행 중인 컨테이너 목록을 찾습니다.그런 다음 도커 컨테이너 스톱을 사용하여 해당 프로세스를 중지하고 포트를 해제할 수 있습니다.이름 열에 이름을 제공하는 docker ps 명령에서 찾을 수 있는 컨테이너 이름입니다.이것이 당신의 질문들을 해결해 주기를 바랍니다..
@CenterOrbit의 답변은 정확하다고 생각합니다. 로그에서 모든 기록을 얻을 수 있다는 점을 제외하고는. 컨테이너가 잠시 실행되고 있다면 많은 작업이 필요할 수 있습니다.
--tail to it을 추가하면 보기를 원하는 기록을 지정한 다음 실시간으로 계속 읽거나, 특정 날짜 이후 로그를 가져오거나, xxx 행을 가져오거나, 날짜/시간 이후 중 더 제한적인 날짜/시간 이후 로그를 계속 읽을 수 있습니다.
docker logs --follow --tail 500 containerid
docker logs --follow --since 2023-06-14T05:00:00 containerid
docker logs --follow --since 2023-06-14T05:00:00 --tail 500 containerid
백그라운드에서 도커 프로세스만 수행하면 되는 경우 사용할 수 있습니다.
Ctrl + Z
퍼포먼스 하시기 바랍니다. (, 와 .) (포그라운드 로)bg명령).
단말기가 더 이상 필요하지 않으면 그냥 닫는 것도 방법입니다.
언급URL : https://stackoverflow.com/questions/19688314/how-do-you-attach-and-detach-from-dockers-process
'programing' 카테고리의 다른 글
| 타이프스크립트에서 npm 모듈을 소비하는 방법은? (0) | 2023.10.10 |
|---|---|
| 사용자의 현재 도시 이름을 검색하는 방법은? (0) | 2023.10.10 |
| 단일 배열 매개 변수를 사용하는 생성자에 대해 New-Object를 호출하려면 어떻게 해야 합니까? (0) | 2023.10.10 |
| Angular.js 프레임워크의 추가 js 파일은 무엇을 위한 것입니까? (0) | 2023.10.10 |
| iOS 앱에서 Oracle에 연결 (0) | 2023.10.10 |
