[Docker] Dangling Image란? (Build 후 Repository:Tag 가 none 인 경우)
[Docker] Dangling Image란? (Build 후 Repository:Tag 가 none 인 경우)
Dangling Images
Image를 사용중인 Container가 존재할 때 아래와 같이 docker rmi 명령어로 Image를 지우려 하면 다음과 같은 에러가 뜬다.
1 2 3
docker rmi test Error response from daemon: conflict: unable to remove repository reference "test" (must force) - container 8bd39093b5cf is using its referenced image 83f310aba04a
Image를 사용 중인 Container가 존재하므로 해당 Image를 삭제할 수 없다는 내용이다.
- 보통의 경우 Container를 먼저 삭제한 후 Image를 삭제한다.
- 이 경우 Image Layer 파일까지 삭제되는데, Image를 사용중인 Container가 있는 상황에서 -f 옵션을 추가해 Image를 강제로 삭제하게 되면 Image Layer 파일을 실제로 삭제하지 않고 Image 이름만 삭제하게 된다.
- 이를 Dangling Image 라고 부른다.
docker rmi -f
명령어로 Image를 강제로 삭제
1
2
3
docker rmi -f test
Untagged: test:latest
docker images
명령어로 Image의 상태를 확인
1
2
3
4
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 83f310aba04a 4 hours ago 910MB
이처럼 Container가 사용 중인 Image를 강제로 삭제하면 Image의 이름이
으로 변겅되며, 이를 Dangling Image라 부른다. Dangling Image는 다음과 같은 명령어를 사용해 별도로 확인할 수 있다.
1 2 3
docker images -f dangling=true REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 83f310aba04a 4 hours ago 910MB
Solution 1. docker system prune
[OPTIONS]
--a
,-a
: dangling된 것 뿐만 아니라, 모든 사용하지않는 Container 종료 및 Image 삭제1
docker system prune [OPTIONS]
Solution 2. docker image prune
Dangling Image 삭제
1
docker image prune
Solution 3. dangling images 전부 삭제
1
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
1
2
3
4
5
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gitea/gitea latest 203b931e8dab 6 weeks ago 148MB
ubuntu 20.04 ba6acccedd29 2 months ago 72.8MB
mariadb 10.4.11 bc20d5f8d0fe 23 months ago 355MB
Solution 4. dangling image에 Repository Name 과 Tag를 정한 후 삭제
1
docker tag 83ac flaskapi:v0.1
1
2
3
4
5
6
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
flaskapi v0.1 83ac5b135a68 2 hours ago 105MB
gitea/gitea latest 203b931e8dab 6 weeks ago 148MB
ubuntu 20.04 ba6acccedd29 2 months ago 72.8MB
mariadb 10.4.11 bc20d5f8d0fe 23 months ago 355MB
1
docker rmi flaskapi:v0.1
Solution 5. Repo와 Tag가 인 Image들 전부 삭제
1
docker rmi $(docker images -a|grep "<none>"|awk '$1=="<none>" {print $3}')
This post is licensed under CC BY 4.0 by the author.