Prevent deletion of image if ANY container is depending on it; not just running containers
This commit is contained in:
parent
cdc07f7d5c
commit
776bb43c9e
1 changed files with 11 additions and 13 deletions
24
server.go
24
server.go
|
@ -1554,22 +1554,20 @@ func (srv *Server) ImageDelete(name string, autoPrune bool) ([]APIRmi, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prevent deletion if image is used by a running container
|
// Prevent deletion if image is used by a container
|
||||||
for _, container := range srv.runtime.List() {
|
for _, container := range srv.runtime.List() {
|
||||||
if container.State.IsRunning() {
|
parent, err := srv.runtime.repositories.LookupImage(container.Image)
|
||||||
parent, err := srv.runtime.repositories.LookupImage(container.Image)
|
if err != nil {
|
||||||
if err != nil {
|
return nil, err
|
||||||
return nil, err
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if err := parent.WalkHistory(func(p *Image) error {
|
if err := parent.WalkHistory(func(p *Image) error {
|
||||||
if img.ID == p.ID {
|
if img.ID == p.ID {
|
||||||
return fmt.Errorf("Conflict, cannot delete %s because the running container %s is using it", name, container.ID)
|
return fmt.Errorf("Conflict, cannot delete %s because the container %s is using it", name, container.ID)
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
|
}); err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue