prevent deletion if image is used by a running container

This commit is contained in:
Victor Vieux 2013-11-08 15:01:01 -08:00
parent 310fbe7bb7
commit 45c2b5dc1a
1 changed files with 20 additions and 0 deletions

View File

@ -1257,6 +1257,26 @@ func (srv *Server) ImageDelete(name string, autoPrune bool) ([]APIRmi, error) {
}
return nil, nil
}
// Prevent deletion if image is used by a running container
for _, container := range srv.runtime.List() {
if container.State.Running {
parent, err := srv.runtime.repositories.LookupImage(container.Image)
if err != nil {
return nil, err
}
if err := parent.WalkHistory(func(p *Image) error {
if img.ID == p.ID {
return fmt.Errorf("Conflict, cannot delete %s because the running container %s is using it", name, container.ID)
}
return nil
}); err != nil {
return nil, err
}
}
}
if strings.Contains(img.ID, name) {
//delete via ID
return srv.deleteImage(img, "", "")