너무 단순한 명령어들이어서 기록의 가치가 없다고 생각했었는데, 한번 테스트 컨테이너를 제대로 구축한 이후에는 서비스 경로를 통해 접근하거나 sshd 를 통해서 쉘 환경에 접근하다보니 자꾸 까먹게되기도 하고 이참에 자세히 정리를 해두어야 겠다는 생각이 들어 써본다.
docker 컨테이너의 sh 환경에 접근하기 위해서는 다음과 같은 방법을 사용할 수 있을 것 같다. 3.ssh 는 사실 컨테이너에 sshd 데몬을 띄워놓고 서버로 사용하는 것이므로 특별히 정리할 내용은 없다.
- docker attach
- docker exec
- ssh
아래와 같이 컨테이너가 실행중일 때
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e112cba194f3 cloudera/quickstart:5.13 "/usr/bin/docker-qui…" 3 weeks ago Up 7 minutes 0.0.0.0:8888->8888/tcp, 0.0.0.0:10022->22/tcp cloudera.cluster.01
1. docker attach
docker attach
+ Container ID
이 방식은 해당 컨테이너의 root 프로세스에 콘솔 접근을 시켜준다. 이는 docker 커맨드가 전달되는 외부 환경의 표준 입출력이 컨테이너의 root 프로세스의 표준입출력과 연결되는 상태이기 때문에 exit
명령을 하는 경우 컨테이너 자체가 종료될 수 있음에 주의해야 한다.
위 경우 아래와 같이 명령하면 쉘 접근이 되고
docker attach e112cba194f3
Ctrl
+ p
+ q
세가지 키 조합으로 빠져(detach
)나올 수 있다.
2. docker exec
docker exec -it
+ Container ID
+ /bin/bash
exec 명령은 docker 컨테이너 내에 새로운 프로세스를 포크하는 건데 그 프로세스를 /bin/bash
로 정한 것이기 때문에 컨테이너 내에 /bin/bash
가 존재하지 않는다면 이 명령어와 똑같이는 접근할 수 없다.
위 예에서는 다음 명령어를 입력하면 별도의 bash 프로세스에서 로컬 bash 세션으로 접속할 수 있다.
docker exec -it e112cba194f3 /bin/bash
그리고 attach 명령으로 붙은것과 달리, exec 명령으로 붙은건 별도로 실행된 bash 이기 때문에 종료는 exit
명령으로 빠져나와도 된다.
The -it instructs Docker to allocate a pseudo-TTY connected to the container’s stdin; creating an interactive bash shell in the container.