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