도커 오류가 도커 컨테이너를 삭제할 수 없습니다. 충돌 : 저장소 참조를 제거 할 수 없습니다


165

Docker에서 컨테이너를 제거하고 싶지만 삭제할 때 오류가 발생합니다.

컨테이너를 제거하기 전에 다음 단계는 기존 컨테이너 목록을 참조하십시오.

sts@Yudi:~/docker$ sudo docker ps -as

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
78479ffeba5c        ubuntu              "/bin/bash"         42 hours ago        Exited (0) 42 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)
0bd2b54678c7        training/webapp     "python app.py"     5 days ago          Exited (0) 5 days ago                         backstabbing_ritchie   0 B (virtual 323.7 MB)
0adbc74a3803        training/webapp     "python app.py"     5 days ago          Exited (143) 5 days ago                       drunk_feynman          0 B (virtual 323.7 MB)

하나는 목록을 삭제하고 싶습니다. 즉 "training / webapp" 이지만 오류가 발생했습니다.

sts@Yudi:~/docker$ sudo docker rmi training/webapp
Error response from daemon: conflict: unable to remove repository reference "training/webapp" (must force) - container 0bd2b54678c7 is using its referenced image 54bb4e8718e8
Error: failed to remove images: [training/webapp]

컨테이너가 이미지에서 실행 중인지 여부

도와주세요


이것은 때때로 나에게 발생하지만 (나에게 항상 발생하지 않기 때문에) 발생하는 원인의 패턴을 파악할 수 없으며 이미지를 강제로 제거하면 다른 것들도 제거합니다. 무엇이 오류의 원인인지 알고 있습니까? 그것을 재현 할 수 있습니까?
Charlie Parker

탁월한 최근 요약 Melissa 예제에서 Docker 이미지, 컨테이너 및 볼륨을 제거하는 방법 2017 년 12 월, 필터 예제, 패턴 등
Webel IT Australia-upvoter

답변:


124

도커 이미지와 도커 컨테이너에는 차이가 있습니다. 이 SO Question을 확인하십시오 .

간단히 말해서 컨테이너는 이미지의 실행중인 인스턴스입니다. 이미지에서 실행중인 컨테이너가 있으면 이미지를 삭제할 수 없습니다. 컨테이너를 먼저 삭제하면됩니다.

docker ps -a               # Lists containers (and tells you which images they are spun from)
docker images              # Lists images  
docker rm <container_id>   # Removes a container

docker rmi <image_id>      # Removes an image 
                           # Will fail if there is a running instance of that image i.e. container

docker rmi -f <image_id>   # Forces removal of image even if it is referenced in multiple repositories, 
                           # i.e. same image id given multiple names/tags 
                           # Will still fail if there is a docker container referencing image

Docker 1.13 이상 업데이트 [2017 년 1 월부터]

Docker 1.13에서는 모든 명령을 다시 그룹화하여 상호 작용하는 논리 객체 아래에 놓습니다.

기본적으로 위의 명령은 다음과 같이보다 명확하게 다시 작성할 수 있습니다.

docker container ls -a
docker image ls
docker container rm <container_id>
docker image rm <image_id>

또한 제거하려는 경우 모든 하려면 다음을 사용할 수 있습니다.

docker system prune -a

경고! 제거됩니다 :

  • 모든 정지 된 용기
  • 하나 이상의 컨테이너에서 사용하지 않는 모든 네트워크
  • 사용하지 않은 모든 이미지
  • 모든 빌드 캐시

3
결국 docker rmi -f id제거를 "강제"하기 위해 사용해야 했습니다.
WernerCD

@WernerCD -f는 여러 리포지토리에서 참조되는 이미지를 제거하려고 할 때 도움이되므로 이미지를 제거하지 못하는 또 다른 일반적인 이유입니다.
Ahmad Abdelghany

1
docker container ls실행중인 컨테이너 만 나열 한다는 점은 주목할 가치가 있습니다. -a플래그 를 추가하면 모든 플래그가 나열 된다는 것을 깨달을 때까지 이것은 나에게 엉망이 되었습니다.
MFB

@MFB 좋은 지적입니다. 두 명령 세트 사이의 패리티를 유지하기 위해 명령에 플래그를 추가했습니다. 감사!
Ahmad Abdelghany

아직 OSX 도커 데스크탑 v2.2.0.4에 (엔진 19.03.8) 작동
rrrrrraul을

83

먼저 컨테이너 이름을 제거하십시오.

$ sudo docker rm backstabbing_ritchie

결과

$ sudo docker rm backstabbing_ritchie
  backstabbing_ritchie

삭제할 컨테이너에 나열된 두 번째 부분을 삭제하십시오.

$ sudo docker rm drunk_feynman 
  drunk_feynman

둘째, 용기를 제거하십시오

$ sudo docker rmi training/webapp

결과

$ sudo docker rmi training/webapp  
  Untagged: training/webapp:latest
  Deleted: 54bb4e8718e8600d78a5d7c62208c2f13c8caf0e4fe73d2bc0e474e93659c0b5
  Deleted: f74dd040041eb4c032d3025fe38ea85de8075992bdce6789b694a44b20feb8de
  Deleted: 7cbae69141977b99c44dc6957b032ad50c1379124d62b7d7d05ab7329b42348e
  Deleted: abb991a4ed5e4cde2d9964aec4cccbe0015ba9cc9838b696e7a32e1ddf4a49bd
  Deleted: 1952e3bf3d7e8e6a9b1e23bd4142e3c42ff7f4b7925122189704323593fd54ac
  Deleted: f95ebd363bf27a7546deced7a41a4099334e37a3d2901fa3817e62bb1ade183f
  Deleted: 20dd0c75901396d41a7b64d551ff04952084cc3947e66c67bae35759c80da338
  Deleted: 2505b734adda3720799dde5004302f5edb3f2a2ff71438f6488b530b728ba666
  Deleted: 2ee0b8f351f753f78f1178000ae37616eb5bf241d4ef041b612d58e1fd2aefdc
  Deleted: 2ce633e3e9c9bd9e8fe7ade5984d7656ec3fc3994f05a97d5490190ef95bce8d
  Deleted: 98b15185dba7f85308eb0e21196956bba653cf142b36dc08059b3468a01bf35d
  Deleted: 515565c29c940355ec886c992231c6019a6cffa17ff1d2abdfc844867c9080c5
  Deleted: 2880a3395eded9b748c94d27767e1e202f8d7cb06f1e40e18d1b1c77687aef77

용기 검사

  $ sudo docker ps -as
  CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES                  SIZE
  78479ffeba5c        ubuntu              "/bin/bash"         43 hours ago        Exited (0) 43 hours ago                       sharp_wescoff          81 B (virtual 187.7 MB)

6
오래된 컨테이너 rm `docker ps -aq`가 많으면 한 번에 하나씩 제거하지 않고 정리를 위해 도커 를 고려할 수도 있습니다 . 자세한 내용은 여기
Philiiiiiipp

이미지를 삭제하기 전에 이름을 삭제해야하는 이유는 무엇입니까? 이름을 먼저 삭제하지 않고 이미지를 삭제하려고하면 왜 문제가됩니까?
code_dredd

@code_dredd "이름 삭제"와 같은 것은 없습니다. 이미지를 삭제하기 전에 먼저 삭제해야하는 컨테이너입니다. stackoverflow.com/a/40283776/1998422
Ahmad Abdelghany

37

도커 이미지 및 컨테이너를 정리하려는 경우

주의 : 이것은 모든 것을 플러시합니다

모든 컨테이너를 중지

docker stop $(docker ps -a -q)

모든 용기를 제거하십시오

docker rm $(docker ps -a -q)

모든 이미지를 제거

docker rmi -f $(docker images -a -q)

효과가있었습니다. 또한 컨테이너를 중지해도 여전히 컨테이너가 목록에 표시됩니다. 따라서로 제거해야합니다 docker rm $(docker ps -a -q). 감사!

28

-f옵션을 사용 하여 컨테이너를 강제로 삭제할 수 있습니다 .

sudo docker rmi -f training/webapp

컨테이너를 sudo docker stop training/webapp삭제하기 전에 사용을 중지 할 수 있습니다


1
컨테이너를 중지하여 시도했습니다. sudo docker stop training / webapp 데몬의 오류 응답 : 해당 ID 없음 : training / webapp 오류 : 컨테이너를 중지하지 못했습니다 : [training / webapp]
Yuday

당신은 컨테이너 ID와 중지 시도 할 수 있습니다 sudo docker stop 0bd2b54678c7
Saril Sudhakaran에게

23

다중 도커 컨테이너가 시작된 경우 이것을 사용하십시오.

$ docker rm $(docker ps -aq)

"ps -aq"명령에 나열된 모든 현재 도커를 제거합니다.

출처 : https://github.com/docker/docker/issues/12487의 aaam


이것은 나를 위해 일했습니다. 이 명령을 실행 한 후 실행 docker image ls한 다음 출력 docker image rm X에서 각 X를 가져 왔습니다 ls.
jftuga

5

이것은 2 년 된 질문이지만 여전히이 특정 질문에 대한 해결 방법을 공유하고 싶습니다.

먼저 docker container ls -a가지고있는 모든 컨테이너를 나열하고 삭제하려는 원하는 것을 정확하게 지정하십시오.

둘째, 명령으로 docker container rm <CONTAINER ID>컨테이너를 삭제하십시오 (컨테이너가 현재 실행중인 경우 먼저 컨테이너 docker container stop <CONTAINER ID>를 중지하고 지정된 이유에 관계없이 컨테이너를 중지하지 않은 경우 달리 실행할 수 있습니다 docker container kill <CONTAINER ID> to force shutdown of the specified container).

셋째,을 실행하여 컨테이너를 제거하십시오 docker container rm <CONTAINER ID>.

마지막으로을 실행 docker image ls -a하여 모든 이미지를 보고을 실행 하여 원하는 이미지를 삭제할 수 있습니다 docker image rm <hash>.


2

도커 이미지 제거>

모든 컨테이너 목록

docker container ls

모든 이미지 나열

docker image ls

컨테이너 ID별로 컨테이너 중지

docker container stop <container_id>

컨테이너 ID로 컨테이너 제거

docker container rm <container_id>

중지 및 제거를 원하지 않으면 강제 제거

docker container rm -f <container_id>

이미지 제거

docker image rm <image_id>

끝난!


2

모든 도커 이미지를 나열하십시오.

docker images

존재하는 모든 도커 컨테이너를 나열하십시오.

docker ps -a

삭제하려는 이미지를 사용하는 모든 대상 컨테이너를 삭제하십시오.

docker rm <container-id>

대상 이미지를 삭제하십시오.

docker rmi <image-name:image-tag or image-id>

0

특정 이미지와 관련된 컨테이너 만 제거

docker ps -a | grep training/webapp | cut -d ' ' -f 1 | xargs docker rm
  • ps -a : 모든 컨테이너를 나열합니다
  • grep training / webapp : 훈련 / webapp 이미지에서 컨테이너가 시작된 것을 제외한 모든 것을 걸러냅니다.
  • cut -d ''-f 1 : 컨테이너 ID 만 나열합니다 (공백으로 구분 된 경우 첫 번째 필드).
  • xargs docker rm : 컨테이너 ID 목록 출력을 docker rm 명령으로 보내 컨테이너를 제거합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.