我在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 run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

它将每30分钟运行一次(或使用DELAY_TIME=1800选项设置多长时间),并清理退出的容器和图像。

更多详情:https://github.com/meltwater/docker-cleanup/blob/master/README.md

其他回答

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

因此,首先

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

然后

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

以下是删除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))

docker rmi  91c95931e552

后台进程的错误响应:冲突,无法删除91c95931e552,因为容器76068d66b290正在使用它,请使用-f强制FATA[0000]错误:未能删除一个或多个图像

查找容器ID,

# docker ps -a

# docker rm  daf644660736 

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

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

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

Docker提供了一些删除图像的命令。

显示/删除图像:

docker images
docker images -a # All images
docker images --no-trunc # List the full length image IDs

docker images --filter "dangling=true" // Show unstage images
docker rmi $(docker images -f "dangling=true" -q) # Remove on unstages images

docker rmi <REPOSITORY> or <Image ID> # Remove a single image

docker image prune # Interactively remove dangling images
docker image prune -a # Remove all images

or 

docker rmi -f $(sudo docker images -a -q)

此外,您还可以使用过滤器参数删除一次:

例子:

$docker images --filter "before=<hello-world>" // It will all images before hello-world

$docker images --filter "since=<hello-world>" // It will all images since hello-world

因此,您可以像这样删除过滤器图像:

docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")