Docker Container 접속

Docker 이미지를 실행한 후에 컨테이너 안으로 들어가서 확인 및 작업을 해야 할 때가 있다.

테스트 컨테이터 실행

먼저 테스트할 컨테이터를 실행하도록 한다.

% docker run --name nginx-server -d -p 80:80 nginx

기존에 이미 실행된 컨테이너가 있다면, 해당 컨테이너로 해도 상관 없다.

실행중인 컨테이너 목록 확인

현재 실행중인 컨테이너 목록 확인한다.

% docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED             STATUS             PORTS                    NAMES
7346db27830e   nginx             "/docker-entrypoint.…"   23 seconds ago      Up 22 seconds      0.0.0.0:80->80/tcp       nginx-server

컨테이너에 접속

위에서 확인한 접속을 하려는 컨테이너에 CONTAINER ID 혹은 NAMES을 입력해서 접속을 하면 된다.

컨테이너에 CONTAINER ID로 접속을 하면 된다.

% docker exec -it 7346db27830e /bin/bash
root@7346db27830e:/#

혹은, NAMES로 접속을 하면 된다.

% docker exec -it nginx-server /bin/bash
root@7346db27830e:/#

exec 명령은 도커 컨테이너 안에서 명령어를 전송할때 사용된다. 이 때, 명령에 /bin/bash로 인자로 넣게 되면, 도커 컨테이너 안에 있는 bash 쉘이 실행되는 것이다.
접속이란게 결국 리눅스의 쉘을 사용하겠다는 뜻이고, 이런 방식으로 컨테이너에 접속을 할 수 있게 된다.

컨테이너 접속 종료

컨테이너에서 접속 종료를 하려면 exit 명령을 사용하면 된다.

% docker exec -it 7346db27830e /bin/bash
root@7346db27830e:/# exit
exit

/bin/sh으로 접속

간혹, 도커 이미지 마다 /bin/bash 명령어가 없는 경우가 있는데, 그럴 경우에는 아래와 같이 접속이 되지 않는 경우도 있다.

% docker exec -it 2910a51bdaf7 /bin/bash
OCI runtime exec failed: exec failed: unable to start container process: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown

이럴때는 /bin/sh으로 컨테이너에 접속을 실행해 보도록 하자.

docker exec -it 285c3f2a0024 /bin/sh