docker container attach
docker container attach
docker container attach는 실행 중인 컨테이너의 표준 입출력 스트림에 연결하는 명령이에요. 실행 중인 컨테이너의 출력을 직접 보고 싶을 때 사용해요.
출처: 문서
본문
docker container attach는 실행 중인 컨테이너의 표준 입력·출력·오류 스트림에 연결해요. docker run으로 띄운 컨테이너의 콘솔에 다시 붙고 싶을 때 유용해요.
지원하는 옵션은 다음과 같아요.
| 옵션 | 기본값 | 설명 |
|---|---|---|
--detach-keys |
컨테이너에서 분리하기 위한 키 시퀀스를 덮어써요 | |
--no-stdin |
STDIN을 연결하지 않아요 | |
--sig-proxy |
true |
받은 모든 신호를 프로세스로 프록시해요 |
실행 중인 컨테이너에 연결했다 분리하기
다음 예제는 top을 실행하는 Alpine 컨테이너를 detached 모드로 시작한 뒤 컨테이너에 연결해요.
$ docker run -d --name topdemo alpine top -b
$ docker attach topdemo
Mem: 2395856K used, 5638884K free, 2328K shrd, 61904K buff, 1524264K cached
CPU: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
Load average: 0.15 0.06 0.01 1/567 6
PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND
1 0 root R 1700 0% 3 0% top -b
컨테이너가 -i, -t 옵션 없이 시작됐으므로 신호가 연결된 프로세스로 전달돼요. 즉 기본 CTRL-p CTRL-q 분리( detach) 키 시퀀스는 효과가 없고, CTRL-c를 누르면 컨테이너가 종료돼요.
<...>
PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND
1 0 root R 1700 0% 7 0% top -b
^P^Q
^C
$ docker ps -a --filter name=topdemo
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
96254a235bd6 alpine "top -b" 44 seconds ago Exited (130) 8 seconds ago topdemo
이번에는 -i와 -t 옵션을 준 상태로 위 예제를 반복해요.
$ docker run -dit --name topdemo2 alpine /usr/bin/top -b
이제 컨테이너에 연결하고 CTRL-p CTRL-q( "read escape sequence")를 누르면, Docker CLI가 분리 시퀀스를 처리하고 attach 명령이 컨테이너에서 분리돼요. docker ps로 상태를 확인하면 컨테이너가 여전히 백그라운드에서 실행 중임을 알 수 있어요.
$ docker attach topdemo2
Mem: 2405344K used, 5629396K free, 2512K shrd, 65100K buff, 1524952K cached
CPU: 0% usr 0% sys 0% nic 99% idle 0% io 0% irq 0% sirq
Load average: 0.12 0.12 0.05 1/594 6
PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND
1 0 root R 1700 0% 3 0% top -b
read escape sequence
$ docker ps -a --filter name=topdemo2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fde88b83c2c2 alpine "top -b" 22 seconds ago Up 21 seconds topdemo2
컨테이너 명령의 종료 코드 가져오기
두 번째 예제에서는 bash 프로세스가 반환하는 종료 코드가 docker attach 명령을 통해 호출자에게도 반환되는 걸 볼 수 있어요.
$ docker run --name test -dit alpine
275c44472aebd77c926d4527885bb09f2f6db21d878c75f0a1c212c03d3bcfab
$ docker attach test
/# exit 13
$ echo $?
13
$ docker ps -a --filter name=test
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a2fe3fd886db alpine "/bin/sh" About a minute ago Exited (13) 40 seconds ago test
분리 시퀀스 덮어쓰기 (--detach-keys)
--detach-keys 옵션으로 Docker 분리 키 시퀀스를 덮어쓸 수 있어요. Docker 기본 시퀀스가 다른 애플리케이션에서 쓰는 키 시퀀스와 충돌할 때 유용해요. 분리 키 시퀀스를 정의하는 방법은 두 가지예요. 컨테이너별 오버라이드 또는 전체 구성의 구성 속성으로 정의할 수 있어요.
개별 컨테이너의 시퀀스를 덮어쓰려면 docker attach 명령에 --detach-keys="<sequence>" 플래그를 사용해요. <sequence> 형식은 문자 [a-Z]이거나, ctrl-과 다음 중 하나를 조합한 값이에요.
a-z(소문자 알파벳 하나)@(골뱅이)[(왼쪽 대괄호)\\(백슬래시 두 개)_(밑줄)^(캐럿)
a, ctrl-a, X, ctrl-\\ 값이 모두 유효한 키 시퀀스 예시예요. 모든 컨테이너에 적용할 다른 기본 키 시퀀스를 구성하려면 Configuration file 섹션을 참고해요.