我在OS X 10.8.4(Mountain Lion)下运行Vagrant下的Docker,每当我尝试删除保存的图像时,都会出现错误:

$ docker rmi some-image-id
2013/07/15 hh:mm:ss unexpected JSON input

根据rmi帮助,正确的语法是docker rmi IMAGE[IMAGE…],我不知道该怎么做。

如何删除图像?

$ docker version
Client version: 0.4.8
Server version: 0.4.8
Go version: go1.1

 

$docker info
Containers: 1
Images: 3

有趣的是,当我运行docker ps时,根本没有容器出现。运行docker图像显示四(4)个基本图像和一(1)个节点图像。


当前回答

首先,我们必须停止并删除Docker容器,这些容器与我们将要删除的Docker映像相关联。

因此,首先

docker stop container id-停止正在运行的容器docker rm container id-删除/删除容器

然后

docker rmi image id-删除/删除图像

其他回答

对我来说,以下工作很好:

> docker images
REPOSITORY   TAG           IMAGE ID          CREATED             SIZE
debian       jessie        86baf4e8cde9      3 weeks ago         123MB
ubuntu       yakkety       7d3f705d307c      3 weeks ago         107MB
alpine       3.5           074d602a59d7      7 weeks ago         3.99MB

然后继续,通过运行以下命令删除图像:

> docker rmi debian:jessie
> docker rmi ubuntu:yakkety
> docker rmi alipine:3.5

首先,我们必须停止并删除Docker容器,这些容器与我们将要删除的Docker映像相关联。

因此,首先

docker stop container id-停止正在运行的容器docker rm container id-删除/删除容器

然后

docker rmi image id-删除/删除图像

尝试docker rmi节点。这应该奏效。

看到所有创建的容器就像docker ps-a一样简单。

要删除所有现有容器(而不是图像!),请运行docker rm$(docker ps-aq)

以下是删除docker图像/容器的一些方法:

删除单个图像

docker rmi image_name:version/image-id

删除所有图像

docker rmi $(docker images -qf "dangling=true")

杀死容器并将其移除:

docker rm $(docker kill $(docker ps -aq))

注:用停止代替压井,以实现正常停机

删除除“我的图像”之外的所有图像

使用grep删除除我的图像和ubuntu之外的所有内容

docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})

或(无锥子)

docker rmi$(docker images--quiet|grep-v$(dockerimages--quiet ubuntu:my image))

下面是一个shell脚本,用于删除标记(命名)的图像及其容器。另存为docker rmi并使用“docker rmi-my image name”运行

#!/bin/bash

IMAGE=$1

if [ "$IMAGE" == "" ] ; then
  echo "Missing image argument"
  exit 2
fi

docker ps -qa -f "ancestor=$IMAGE" | xargs docker rm
docker rmi $IMAGE