| ... | ... |
@@ -450,11 +450,7 @@ func deleteImages(srv *Server, version float64, w http.ResponseWriter, r *http.R |
| 450 | 450 |
return fmt.Errorf("Missing parameter")
|
| 451 | 451 |
} |
| 452 | 452 |
name := vars["name"] |
| 453 |
- force, err := getBoolParam(r.Form.Get("force"))
|
|
| 454 |
- if err != nil {
|
|
| 455 |
- return err |
|
| 456 |
- } |
|
| 457 |
- if err := srv.ImageDelete(name, force); err != nil {
|
|
| 453 |
+ if err := srv.ImageDelete(name); err != nil {
|
|
| 458 | 454 |
return err |
| 459 | 455 |
} |
| 460 | 456 |
w.WriteHeader(http.StatusNoContent) |
| ... | ... |
@@ -1268,7 +1268,7 @@ func TestDeleteImages(t *testing.T) {
|
| 1268 | 1268 |
} |
| 1269 | 1269 |
|
| 1270 | 1270 |
r := httptest.NewRecorder() |
| 1271 |
- if err := deleteImages(srv, r, req, map[string]string{"name": "test:test"}); err != nil {
|
|
| 1271 |
+ if err := deleteImages(srv, API_VERSION, r, req, map[string]string{"name": "test:test"}); err != nil {
|
|
| 1272 | 1272 |
t.Fatal(err) |
| 1273 | 1273 |
} |
| 1274 | 1274 |
if r.Code != http.StatusNoContent {
|
| ... | ... |
@@ -558,7 +558,6 @@ func (cli *DockerCli) CmdPort(args ...string) error {
|
| 558 | 558 |
// 'docker rmi IMAGE' removes all images with the name IMAGE |
| 559 | 559 |
func (cli *DockerCli) CmdRmi(args ...string) error {
|
| 560 | 560 |
cmd := Subcmd("rmi", "IMAGE [IMAGE...]", "Remove an image")
|
| 561 |
- force := cmd.Bool("f", false, "Force")
|
|
| 562 | 561 |
if err := cmd.Parse(args); err != nil {
|
| 563 | 562 |
return nil |
| 564 | 563 |
} |
| ... | ... |
@@ -567,13 +566,8 @@ func (cli *DockerCli) CmdRmi(args ...string) error {
|
| 567 | 567 |
return nil |
| 568 | 568 |
} |
| 569 | 569 |
|
| 570 |
- v := url.Values{}
|
|
| 571 |
- if *force {
|
|
| 572 |
- v.Set("force", "1")
|
|
| 573 |
- } |
|
| 574 |
- |
|
| 575 | 570 |
for _, name := range cmd.Args() {
|
| 576 |
- _, _, err := cli.call("DELETE", "/images/"+name+"?"+v.Encode(), nil)
|
|
| 571 |
+ _, _, err := cli.call("DELETE", "/images/"+name, nil)
|
|
| 577 | 572 |
if err != nil {
|
| 578 | 573 |
fmt.Printf("%s", err)
|
| 579 | 574 |
} else {
|
| ... | ... |
@@ -704,7 +704,7 @@ func (srv *Server) ContainerDestroy(name string, removeVolume bool) error {
|
| 704 | 704 |
return nil |
| 705 | 705 |
} |
| 706 | 706 |
|
| 707 |
-func (srv *Server) ImageDelete(name string, force bool) error {
|
|
| 707 |
+func (srv *Server) ImageDelete(name string) error {
|
|
| 708 | 708 |
img, err := srv.runtime.repositories.LookupImage(name) |
| 709 | 709 |
if err != nil {
|
| 710 | 710 |
return fmt.Errorf("No such image: %s", name)
|
| ... | ... |
@@ -739,13 +739,17 @@ func (srv *Server) ImageDelete(name string, force bool) error {
|
| 739 | 739 |
} |
| 740 | 740 |
} |
| 741 | 741 |
// check is the image to delete isn't parent of another image |
| 742 |
- if !force {
|
|
| 743 |
- images, _ := srv.runtime.graph.All() |
|
| 744 |
- for _, image := range images {
|
|
| 745 |
- if imgParent, err := image.GetParent(); err == nil && imgParent != nil {
|
|
| 746 |
- if imgParent.Id == img.Id {
|
|
| 747 |
- return fmt.Errorf("Conflict: Can't delete %s otherwise %s will be broken", name, image.ShortId())
|
|
| 742 |
+ images, _ := srv.runtime.graph.All() |
|
| 743 |
+ for _, image := range images {
|
|
| 744 |
+ if imgParent, err := image.GetParent(); err == nil && imgParent != nil {
|
|
| 745 |
+ if imgParent.Id == img.Id {
|
|
| 746 |
+ if strings.Contains(img.Id, name) {
|
|
| 747 |
+ return fmt.Errorf("Conflict with %s, %s was not removed", image.ShortId(), name)
|
|
| 748 | 748 |
} |
| 749 |
+ if err := srv.runtime.repositories.Delete(name, tag, img.Id); err != nil {
|
|
| 750 |
+ return err |
|
| 751 |
+ } |
|
| 752 |
+ return nil |
|
| 749 | 753 |
} |
| 750 | 754 |
} |
| 751 | 755 |
} |
| ... | ... |
@@ -29,7 +29,7 @@ func TestContainerTagImageDelete(t *testing.T) {
|
| 29 | 29 |
t.Errorf("Excepted 3 images, %d found", len(images))
|
| 30 | 30 |
} |
| 31 | 31 |
|
| 32 |
- if err := srv.ImageDelete("utest/docker:tag2", true); err != nil {
|
|
| 32 |
+ if err := srv.ImageDelete("utest/docker:tag2"); err != nil {
|
|
| 33 | 33 |
t.Fatal(err) |
| 34 | 34 |
} |
| 35 | 35 |
|
| ... | ... |
@@ -42,7 +42,7 @@ func TestContainerTagImageDelete(t *testing.T) {
|
| 42 | 42 |
t.Errorf("Excepted 2 images, %d found", len(images))
|
| 43 | 43 |
} |
| 44 | 44 |
|
| 45 |
- if err := srv.ImageDelete("utest:tag1", true); err != nil {
|
|
| 45 |
+ if err := srv.ImageDelete("utest:tag1"); err != nil {
|
|
| 46 | 46 |
t.Fatal(err) |
| 47 | 47 |
} |
| 48 | 48 |
|