Configuration

docker ps 와 docker ps -a 의 차이점 (docker container 확인) & docker start vs docker run - 예전에 썼던 컨테이너 rm없이 재사용하기

JUNFUTURE 2022. 3. 6. 18:11

도커를 다시 쓰려고 docker run 명령어를 해보면, 다음과 같은 오류가 뜰때가 있다.

#도커 이미지 확인
sudo docker images
#도커 이미지 ID 이용하여 새로운 컨테이너 제작
sudo docker run -i -t -d -p 9080:8080 --name arvm 3c4869872aac

jun@ubuntu:~/jun/CTF/20220226/arvm$ sudo docker run -i -t -d -p 9080:8080 --name arvm 3c4869872aac
docker: Error response from daemon: Conflict. The container name "/arvm" is already in use by container "a7f4227f8b123eb3dda71d7bf8f03eb496bd19ecf8f3d07f5acb86b1ce370b46". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

오늘은 이 문제를 해결해보자.

핵심은

docker run은 새 컨테이너를 생성하고 시작하는 명령어이다. (create + start)
docker create : 도커 이미지를 보고 새로운 컨테이너를 생성. 시작(start)은 X
docker start : 중지된(stop) 컨테이너를 시작(start) 실행은(exec) X 

이다.

즉, docker run은 존재하는 컨테이너를 단순히 시작해주는 명령어가 아니라,
새로운 컨테이너를 생성하고 시작해주는 명령어이기 때문에,
이미 이전에 create 혹은 run을 이용해 컨테이너를 만들어 두고 (docker ps -a 에 있으면)

docker run 명령어를 실행하면

is already in use by container "[container ID]"

와 같은 오류가 뜨게 되는것이다!!

 

이를 해결하려면

docker run [container ID]

명령을 이용해 container를 run상태로 만든(start)후에 exec을 이용해 container를 이용하면된다.

 

docker ps와 docker ps -a의 차이 그리고 running container와 아닌 container

docker ps는 docker image를 통해 생성된 docker container의 정보를 출력해주는 명령어이다.

sudo docker ps
sudo docker ps -a

와 같은 명령을 통해 docker container의 정보를 확인할 수 있다.

그런데 docker ps와 docker ps -a의 차이는 무엇일까??

docker ps는 running 상태인 컨테이너만 보여주는데

docker ps -a 는 모든 컨테이너를 보여준다.

그렇다면 running 상태의 컨테이너와 그렇지 않은 컨테이너의 차이는 무엇일까??


running 상태의 컨테이너는 : exec 명령으로 바로 컨테이너에 접속할 수 있다.

running 상태가 아닌 컨테이너는 : docker start 명령을 통해 running 상태로 만들어 준 후, exec으로 컨테이너에 접속해야한다.

이로써 비로소 exec 명령을 통해 도커 컨테이너에 접속할 수 있다.

#실행중인 컨테이너 접속
sudo docker exec -it arvm /bin/bash