Browse code

docker rmi: remove an image

Solomon Hykes authored on 2013/02/01 17:08:45
Showing 2 changed files
... ...
@@ -222,6 +222,29 @@ func (srv *Server) CmdInspect(stdin io.ReadCloser, stdout io.Writer, args ...str
222 222
 	return nil
223 223
 }
224 224
 
225
+// 'docker rmi NAME' removes all images with the name NAME
226
+func (srv *Server) CmdRmi(stdin io.ReadCloser, stdout io.Writer, args ...string) error {
227
+	cmd := rcli.Subcmd(stdout, "rmimage", "[OPTIONS] IMAGE", "Remove an image")
228
+	if err := cmd.Parse(args); err != nil {
229
+		cmd.Usage()
230
+		return nil
231
+	}
232
+	if cmd.NArg() < 1 {
233
+		cmd.Usage()
234
+		return nil
235
+	}
236
+	for _, name := range cmd.Args() {
237
+		image := srv.images.Find(name)
238
+		if image == nil {
239
+			return errors.New("No such image: " + name)
240
+		}
241
+		if err := srv.images.Delete(name); err != nil {
242
+			return err
243
+		}
244
+	}
245
+	return nil
246
+}
247
+
225 248
 func (srv *Server) CmdRm(stdin io.ReadCloser, stdout io.Writer, args ...string) error {
226 249
 	flags := rcli.Subcmd(stdout, "rm", "[OPTIONS] CONTAINER", "Remove a container")
227 250
 	if err := flags.Parse(args); err != nil {
... ...
@@ -186,6 +186,28 @@ func (index *Index) Rename(oldName, newName string) error {
186 186
 	return nil
187 187
 }
188 188
 
189
+// Delete deletes all images with the name `name`
190
+func (index *Index) Delete(name string) error {
191
+	// Load
192
+	if err := index.load(); err != nil {
193
+		return err
194
+	}
195
+	if _, exists := index.ByName[name]; !exists {
196
+		return errors.New("No such image: " + name)
197
+	}
198
+	// Remove from index lookup
199
+	for _, image := range *index.ByName[name] {
200
+		delete(index.ById, image.Id)
201
+	}
202
+	// Remove from name lookup
203
+	delete(index.ByName, name)
204
+	// Save
205
+	if err := index.save(); err != nil {
206
+		return err
207
+	}
208
+	return nil
209
+}
210
+
189 211
 func (index *Index) Names() []string {
190 212
 	if err := index.load(); err != nil {
191 213
 		return []string{}