1. 개요
실행 중인 Docker 컨테이너 내부로 접속해 파일을 확인하거나 명령을 실행하는 방법이다. 예시에서는 tomcat:8 컨테이너에 docker exec 명령으로 접속한다.
2. 방법
2-1. 컨테이너 ID 확인
먼저 docker ps로 현재 실행 중인 컨테이너 목록을 확인한다.
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f537532e716c tomcat:8 "catalina.sh run" 11 minutes ago Up 11 minutes 0.0.0.0:8080->8080/tcp reverent_darwin
위 결과에서 컨테이너 ID는 f537532e716c이다. 전체 ID를 모두 입력하지 않아도, 다른 컨테이너와 구분될 만큼의 앞부분만 입력해도 된다.
2-2. 컨테이너 내부로 접속
docker exec -it 명령을 사용해 실행 중인 컨테이너 안에서 셸을 실행한다.
# docker exec -it f537532e716c /bin/bash root@f537532e716c:/usr/local/tomcat#
프롬프트가 root@f537532e716c:/usr/local/tomcat#처럼 바뀌면 컨테이너 내부로 정상 접속된 것이다. 이미지에 따라 /bin/bash가 없을 수 있으며, 이 경우에는 /bin/sh를 사용할 수 있다.
2-3. 접속 확인
컨테이너 내부에서 ls -l을 실행해 현재 디렉터리의 파일 목록을 확인한다.
root@f537532e716c:/usr/local/tomcat# ls -l total 120 -rw-r----- 1 root root 57092 Apr 27 20:26 LICENSE -rw-r----- 1 root root 1723 Apr 27 20:26 NOTICE -rw-r----- 1 root root 7138 Apr 27 20:26 RELEASE-NOTES -rw-r----- 1 root root 16246 Apr 27 20:26 RUNNING.txt drwxr-x--- 2 root root 4096 Jun 27 07:13 bin drwx--S--- 1 root root 4096 Jun 28 00:37 conf drwxr-sr-x 3 root staff 4096 Jun 27 07:12 include drwxr-x--- 2 root root 4096 Jun 27 07:12 lib drwxr-x--- 1 root root 4096 Jun 28 00:37 logs drwxr-sr-x 3 root staff 4096 Jun 27 07:12 native-jni-lib drwxr-x--- 2 root root 4096 Jun 27 07:12 temp drwxr-x--- 1 root root 4096 Apr 27 20:24 webapps drwxr-x--- 1 root root 4096 Jun 28 00:37 work
작업을 마친 뒤에는 exit를 입력하거나 Ctrl+D를 눌러 컨테이너 셸에서 빠져나오면 된다. 이 명령은 컨테이너 내부의 셸만 종료하며, 실행 중인 컨테이너 자체를 중지하지는 않는다.