Prevent deletion of image if ANY container is depending on it; not just running containers

This commit is contained in:
Danny Yates 2013-12-09 20:46:21 +00:00
parent cdc07f7d5c
commit 776bb43c9e

View file

@ -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
} }
} }