Docker가 사용 중이지만 Docker 컨테이너가 없습니다.


166

Docker 1.9.1에서 Docker 볼륨을 제거하는 데 문제가 있습니다.

중지 된 컨테이너를 모두 제거하여 docker ps -a비어 있습니다.

을 사용할 때 docker volume ls전체 Docker 컨테이너가 제공됩니다.

docker volume ls
DRIVER              VOLUME NAME
local               a94211ea91d66142886d72ec476ece477bb5d2e7e52a5d73b2f2f98f6efa6e66
local               4f673316d690ca2d41abbdc9bf980c7a3f8d67242d76562bbd44079f5f438317
local               eb6ab93effc4b90a2162e6fab6eeeb65bd0e4bd8a9290e1bad503d2a47aa8a78
local               91acb0f7644aec16d23a70f63f70027899017a884dab1f33ac8c4cf0dabe5f2c
local               4932e2fbad8f7e6246af96208d45a266eae11329f1adf176955f80ca2e874f69
local               68fd38fc78a8f02364a94934e9dd3b5d10e51de5b2546e7497eb21d6a1e7b750
local               7043a9642614dd6e9ca013cdf662451d2b3df6b1dddff97211a65ccf9f4c6d47
#etc x 50

이 볼륨 중 어느 것도 중요한 것을 포함하지 않기 때문에 모든 볼륨을로 제거하려고합니다 docker volume rm $(docker volume ls -q).

이 과정에서 대다수가 제거되었지만 다시 돌아옵니다.

Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use
Error response from daemon: Conflict: volume is in use

그들 중 상당 부분을 위해. 처음에 컨테이너가 없으면이 볼륨은 어떻게 사용됩니까?


7
도커는 참조 카운트를 사용하여 볼륨이 여전히 사용 중인지 확인합니다. 이것은 모두 메모리 내에서 수행됩니다. 이것은 어쨌든 버그 또는 경쟁 조건 일 수 있으며, 이로 인해 컨테이너가 제거되었지만 카운터가 업데이트되지 않습니다. 데몬을 다시 시작하면 문제가 해결되지만 어딘가에 버그가있을 수 있습니다. 설정에 특별한 것이 있습니까 (예 : docker-in-docker, Swarm을 사용하고 있습니까?). 컨테이너를 정리하기 위해 스크립트 나 도구를 사용합니까?
thaJeztah

5
안녕하세요 @thaJeztah가 Docker 데몬 ( sudo service docker stopsudo service docker start)을 다시 시작하면 이 유령 볼륨이 모두 지워졌습니다. 또한 docker rm -v 명령을 사용하여 문제없이 볼륨을 제거 할 수있는 것처럼 보입니다. 주목할만한 차이점은 Ubuntu 15.10에서 docker-compose를 사용하고 있다는 것입니다. 이 문제를 재현 할 수 있으면 다시보고하지만 그렇지 않으면 간단한 재시작으로 충분합니다. 감사!
Tkwon123

2
재부팅 후에도 여전히 도커 볼륨이 사용
중이라고 표시

10
docker compose를 사용하는 경우 down 명령에 -v를 추가하여 볼륨을 제거 할 수 있습니다.
Niels Bech Nielsen

5
docker를 중지 한 다음 파일 시스템에서 볼륨을 제거하고 docker를 다시 시작 하여이 문제를 해결했습니다. service docker stop && rm -rf /var/lib/docker/volumes/TheVolumIdYouWantToRemove && service docker start
jfgrissom

답변:


169

이 기능을 사용하여 Docker와 관련된 모든 것을 잔인하게 제거 할 수 있습니다.

removecontainers() {
    docker stop $(docker ps -aq)
    docker rm $(docker ps -aq)
}

armageddon() {
    removecontainers
    docker network prune -f
    docker rmi -f $(docker images --filter dangling=true -qa)
    docker volume rm $(docker volume ls --filter dangling=true -q)
    docker rmi -f $(docker images -qa)
}

~/Xrc파일에 파일 을 추가 할 수 있습니다 . 여기서 X는 쉘 인터프리터 ( ~/.bashrcbash를 사용하는 경우) 파일이며 실행을 통해 다시로드 할 수 있습니다 source ~/Xrc. 또한 콘솔에 붙여 넣은 다음 복사 할 수 있습니다 (기능 준비를 위해 이전에 선택한 옵션에 관계없이).

armageddon

일반적인 Docker 정리에도 유용합니다. 이렇게하면 컨테이너 (실행 중이 든 아니든) 및 모든 종류의 볼륨뿐만 아니라 이미지도 제거됩니다.


3
질문에 따라 docker volume rm명령이 실패했습니다. 주석에서 해결책은 도커 데몬을 다시 시작하여 참조 횟수를 수정하는 것으로 보입니다.
BMitch

2
:이에 대한 해결책이 아니다 즉, 의견을주의 깊게 읽는다면 @BMitcheven after reboot it still says docker volume is in use..
데이비드 곤잘레스 루이즈

1
holms는 다른 문제가있는 것으로 보이며 질문을 게시 한 것이 아닙니다. 그 위의 한 가지 의견을 찾아보십시오.
BMitch

10
gonsales, 👏 함수 이름에 대한 철자가armageddon
Joseph Sheedy

1
이것은 내 문제를 해결하지 못했습니다. 사용 docker-compose down --volumes(@Robert K. 벨에 의해 제안) 생각했다
BiAiB

159

아마도 볼륨은 docker-compose? 그렇다면 다음을 통해 제거 해야합니다 .

docker-compose down --volumes

Niels Bech Nielsen 에게 신용 !


3
이것은 작동합니다 :) 이것은 또한 모든 컨테이너 자체를 제거한다는 점에 유의하는 것이 좋습니다. 컨테이너에서 이미지가 아닌 영구 마운트가 아닌 파일을 변경 한 경우에는 원하지 않을 수 있습니다.
Alexander Varwijk

58

Docker를 처음 접했습니다. 초기 테스트 혼란을 정리하고 볼륨도 제거 할 수 없었습니다. 실행중인 모든 인스턴스를 중지하고을 수행 docker rmi -f $(docker image ls -q)했지만 여전히을 받았습니다 Error response from daemon: unable to remove volume: remove uuid: volume is in use.

나는 a를 docker system prune하고 마지막 볼륨을 제거하는 데 필요한 것을 정리했습니다.

[0]$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
... about 15 containers UUID's truncated

Total reclaimed space: 2.273MB
[0]$ docker volume ls
DRIVER              VOLUME NAME
local              uuid
[0]$ docker volume rm uuid
uuid
[0]$

docker system prune

이 명령을 사용하려면 클라이언트 및 데몬 API가 모두 1.25 이상이어야합니다. docker version클라이언트 에서 명령을 사용 하여 클라이언트 및 데몬 API 버전을 확인하십시오.


어떤 이유로 나는 그것이 작동하기 전에 이것을 두 번해야했습니다.
mameluc

1
"docker system prune"과 "docker volume rm volume_name"을 수행해야했습니다. 어떤 이유로 든 이미 삭제 한 컨테이너를 삭제했습니다. 혼란 .
Matthew Rideout

54

중지 된 컨테이너 중 하나에서 볼륨을 사용할 수 있습니다. 다음과 같은 명령으로 이러한 컨테이너를 제거 할 수 있습니다.

docker container prune

사용하지 않은 볼륨을 제거 할 수 있습니다

docker volume prune

1
이 허용 대답해야한다, 몰라 왜 주어진 대답 같은 사람
Elger Mensonides

9

볼륨이 컨테이너와 연관되어있는 한 (실행 중이 든 아니든) 제거 할 수 없습니다.

당신은 실행해야합니다

docker inspect <container-id>/<container-name>

이 볼륨이 마운트되었을 수있는 각 실행 / 비 실행 컨테이너에서

볼륨이 컨테이너 중 하나에 마운트 된 경우 inspect 명령 출력 의 마운트 섹션에서 볼 수 있습니다. 이 같은 :-

"Mounts": [
            {
                "Type": "volume",
                "Name": "user1",
                "Source": "/var/lib/docker/volumes/user1/_data",
                "Destination": "/opt",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

담당 컨테이너를 파악한 후 다음을 사용하십시오.

docker rm -f container-1 container-2 ...container-n 컨테이너가 작동하는 경우

docker rm container-1 container-2 ...container-n 비 실행 용기의 경우

호스트 시스템에서 컨테이너를 완전히 제거합니다.

그런 다음 명령을 사용하여 볼륨을 제거하십시오.

docker volume remove <volume-name/volume-id>


1
유용한 답변을 얻으려면이 반응을 확장해야합니다. 이를 확인하는 방법에 대한 정보를 추가하십시오.
Jeroen Heier

1
나는 내기 docker container prune대부분의 경우 충분해야합니다.
x-yuri

6

현재 일반적이고 더 완벽한 청소를 위해 docker가 제공하는 것을 사용할 수 있습니다.

docker system prune

매달린 컨테이너뿐만 아니라 중지 된 컨테이너와 사용되지 않은 모든 이미지를 추가로 제거하려면 -a명령에 플래그를 추가하십시오 .

docker system prune -a

3

해당 볼륨이 실제로 시스템에 마운트되어 있다고 확신합니다. / proc / mounts를 보면 거기에서 볼 수 있습니다. 당신은 가능성이 필요합니다 sudo umount <path>sudo umount -f -n <path>. / proc / mounts 또는를 통해 마운트 된 경로를 얻을 수 있어야합니다.docker volume inspect


-3

이 명령을 플래그 -f (force)와 함께 입력해야합니다.

sudo docker volume rm -f <VOLUME NAME>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.