/인프라/Docker "container name is already in use" 에러 해결법 (docker rm -f)
인프라Dockerdocker name already in use 해결

Docker "container name is already in use" 에러 해결법 (docker rm -f)

Docker "Conflict. The container name is already in use" 에러를 docker rm -f로 즉시 해결하세요. docker run·docker compose 상황별 복붙 명령과 원인, 재발 방지 예방법까지 정리했습니다.

Docker "container name is already in use" 에러 해결법 (docker rm -f)

Docker "container name is already in use" 에러 5분 해결법

방금 전까지 잘 돌던 컨테이너를 다시 띄웠을 뿐인데 갑자기 이런 에러를 만나셨죠?

CODE
docker: Error response from daemon: Conflict. The container name "/myapp" is already in use by container "a1b2c3d4...". You have to remove (or rename) that container to be able to reuse that name.

먼저 안심하세요. 이건 장애가 아닙니다. 데이터가 날아간 것도, Docker가 고장 난 것도 아니고 30초면 끝나는 아주 흔한 상황입니다. 같은 이름의 컨테이너가 디스크에 남아 있어서 이름이 겹쳤을 뿐이에요. 급하면 아래 "즉시 해결" 블록부터 복붙하고, 시간 되면 원인과 예방법까지 읽어보세요.

참고: 이 글은 로컬/단일 호스트 Docker 환경 한정입니다. Kubernetes의 ImagePullBackOff·CrashLoopBackOff 같은 파드 라이프사이클 이슈는 원인과 해결이 전혀 다르니 K8s 환경이라면 다른 글을 참고하세요.

급하면 여기부터: docker run 환경 30초 해결

원인은 한 줄로 정리됩니다. 컨테이너는 종료(Exited)돼도 삭제 전까지 이름을 계속 점유합니다. 그래서 같은 이름으로 다시 docker run 하면 충돌이 나죠.

1단계 — 범인 확인 (30초 진단)

Bash
docker ps -a | grep myapp

이렇게 종료된 컨테이너가 이름을 붙들고 있는 게 보일 겁니다.

CODE
a1b2c3d4e5f6   nginx   "/docker-ent..."   10분 전   Exited (0) 5분 전   myapp

STATUS가 Exited (0)인데도 NAMES 칸에 myapp이 그대로 남아 있죠. 바로 이놈이 이름을 점유 중인 범인입니다.

여기서 docker psdocker ps -a의 차이를 꼭 알아두세요.

명령보여주는 대상
docker ps실행 중인 컨테이너만
docker ps -a종료(Exited) 포함 전체 컨테이너

docker ps로 안 보인다고 "없는 줄" 알았다가 충돌이 나는 게 가장 흔한 함정입니다. 이름 점유 여부는 반드시 -a로 확인하세요.

2단계 — 상태별 복붙 명령 3종

Bash
# (1) 종료된 컨테이너 삭제 — 가장 안전, 평소엔 이것
docker rm myapp

# (2) 실행 중이어도 강제 삭제 — ⚠️ 돌고 있는 컨테이너를 즉시 죽이고 삭제. 급할 때만
docker rm -f myapp

# (3) 정상 종료 후 삭제 — 우아하게 멈추고 지우고 싶을 때
docker stop myapp && docker rm myapp
명령언제 쓰나위험도
docker rm myapp이미 멈춘(Exited) 컨테이너낮음
docker rm -f myapp실행 중이라 (1)이 거부될 때, 급할 때⚠️ 강제 종료 주의
docker stop && docker rm실행 중인 걸 안전하게 정리할 때낮음

삭제 후 원래 명령을 다시 실행하면 끝입니다.

Bash
docker run -d --name myapp nginx

docker compose 환경에서 같은 에러가 났을 때

Compose에서도 container_name을 고정하면 똑같은 충돌이 납니다.

YAML
# docker-compose.yml
services:
  web:
    image: nginx
    container_name: myapp   # ← 이름을 못 박아서 재기동 시 충돌 가능
    ports:
      - "8080:80"

container_name을 명시하면 Compose가 자동으로 붙이는 프로젝트 접두사(프로젝트명-서비스명-번호)가 사라지고 이름이 고정됩니다. 이 상태에서 이전 컨테이너가 남아 있으면 up 할 때 충돌이 나죠. 해결 흐름은 이렇습니다.

Bash
# 방법 A) 기존 컨테이너를 강제로 다시 만들며 기동
docker compose up -d --force-recreate

# 특정 서비스만 재생성하고 싶다면
docker compose up -d --force-recreate web

# 방법 B) 깔끔하게 내렸다가 다시 올리기 (가장 확실)
docker compose down && docker compose up -d

참고로 요즘은 하이픈 붙은 docker-compose(V1)가 아니라 띄어쓰기 docker compose(V2) 가 표준입니다. 명령어가 헷갈린다면 V2 쪽으로 통일하세요.

실무 경험 한마디: CI/CD 파이프라인에서 고정 container_name을 쓰면 재배포 때마다 이 충돌이 단골로 터집니다. 저는 배포 스크립트 맨 앞에 docker compose down --remove-orphans를 한 줄 넣어 두거나, 아예 container_name을 빼고 Compose가 자동 생성하는 이름을 쓰도록 바꿔서 재배포 충돌을 없앴습니다. 이름 고정이 꼭 필요한 게 아니라면 빼는 쪽이 운영이 훨씬 편합니다.

다시는 안 만나기: 근본 예방법

문제를 매번 지우는 것보다 안 생기게 하는 게 낫죠.

  • 일회성 컨테이너엔 --rm: 종료되는 순간 자동 삭제돼 이름이 남지 않습니다.
    Bash
    docker run --rm --name test nginx
  • 장기 실행 서비스엔 재시작 정책: 죽거나 데몬이 재시작돼도 알아서 살아납니다.
    Bash
    docker run -d --restart unless-stopped --name myapp nginx
  • 네이밍 규칙으로 충돌 원천 차단: 환경별로 접두사/접미사를 붙이면 이름이 겹칠 일이 없습니다.
    CODE
    app-dev    # 개발
    app-stage  # 스테이징
    app-prod   # 운영

결론: 상황별 치트시트

상황명령
멈춘 컨테이너 삭제docker rm <name>
실행 중이어도 강제 삭제docker rm -f <name>
안전하게 멈추고 삭제docker stop <name> && docker rm <name>
Compose 재생성docker compose up -d --force-recreate
Compose 완전 재기동docker compose down && docker compose up -d
이름만 바꾸기docker rename <old> <new>

행동 가이드는 간단합니다. 급하면 docker rm -f, 평소엔 --rm. 이 두 개만 기억하면 이 에러로 다시 시간을 뺏기지 않습니다.

자주 묻는 질문 (FAQ)

Q. 컨테이너를 지우긴 싫고 이름만 바꾸고 싶어요. A. docker rename을 쓰면 됩니다. 데이터나 설정은 그대로 두고 이름만 변경돼서, 충돌나는 이름을 비워줄 수 있습니다.

Bash
docker rename myapp myapp-old

Q. 왜 같은 이름의 컨테이너를 여러 개 못 만드나요? A. Docker에서 컨테이너 이름은 ID와 함께 고유 식별자 역할을 합니다. docker stop myapp처럼 이름으로 컨테이너를 지목하려면 그 이름이 유일해야 하므로 중복이 허용되지 않습니다. 여러 개가 필요하면 --name 옵션을 빼서 Docker가 임의 이름을 붙이게 하세요.

Q. docker rm이 "container is running" 이라며 거부해요. A. 실행 중인 컨테이너는 그냥 rm으로 못 지웁니다. docker stop <name>docker rm <name> 하거나, 급하면 docker rm -f <name>로 강제 삭제하세요.

✦ ✦ ✦
편집 검토 · Editorial Review

이 글은 AI 에이전트가 1차 초안을 작성한 뒤, 사람 편집자가 사실관계·출처·톤과 맥락을 검토하여 발행했습니다. 오류나 부정확한 내용이 확인되면 24시간 이내에 정정합니다.

작성 · Content Reviewer·검토 · 사람 편집자·발행 · 2026년 6월 15일

댓글

불러오는 중...