我在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 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))
更新,正如VonC在如何删除旧Docker容器中所评论的。
使用Docker 1.13(2016年第4季度),您现在可以:
docker系统prune将删除所有未使用的数据(即,按顺序:容器停止、没有容器的卷和没有容器的图像)。
请参阅PR 26108和commit 86de7c0,它们引入了一些新命令,以帮助可视化Docker守护程序数据在磁盘上占用的空间,并允许轻松清理“不需要的”多余空间。
docker system prune
WARNING! This will remove:
- all stopped containers
- all volumes not used by at least one container
- all images without at least one container associated to them
Are you sure you want to continue? [y/N] y
如果您希望自动/定期清理退出的容器,并删除正在运行的容器未使用的图像和卷,可以下载图像融合器/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
对于1.13及更高版本:
docker image rm [OPTIONS] IMAGE [IMAGE...]
比较:
docker图像rm和docker rmi的文档,
[选项]似乎没有什么不同。
--force , -f Force removal of the image
--no-prune Do not delete untagged parents
发件人:Docker 1.13简介
CLI已重组在Docker 1.13中,我们重新组合了每个命令,使其位于与之交互的逻辑对象之下。例如,list和start of containers现在是docker container的子命令,history是docker image的子命令。这些更改让我们清理了Docker CLI语法,改进了帮助文本,使Docker更易于使用。旧的命令语法仍然受到支持,但我们鼓励大家采用新的语法。
列出图像:
ahanjura@ubuntu:~$ sudo docker images
存储库标记图像ID创建的大小88282f8eda00 19秒前308.5 MB13e5d3d682f4 19小时前663 MBbusybox2最新05fe66bb1144 20小时前1.129 MBubuntu 16.04 00fd29ccc6f1 5天前110.5 MBubuntu 14.04 67759a80360c 5天前221.4 MBpython 2.7 9e92c8430ba0 7天前680.7 MBbusybox最新版本6ad733544a63 6周前1.129 MBubuntu 16.10 7d3f705d307c 5个月前106.7 MB
删除图像:
ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00
删除:sha256:88822f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194删除:sha256:4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9删除:sha256:8cc617ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8删除:sha256:b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43
ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4
守护程序的错误响应:冲突:无法删除13e5d3d682f4(必须强制)-已停止的容器5593e25eb638正在使用映像
强行删除:
ahanjura@ubuntu:~$ sudo docker rmi -f 13e5d3d682f4
删除:sha256:13e5d3d682f4d973780b35a33393c46eb314ef3db45d3ae83baf2dd9d702747e删除:sha256:3ad9381c7041c03768ccd855ec86caa6bc0244223f1b0465c4898bdb21dc378删除:sha256:5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af删除:sha256:18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf
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>")