我在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 images
会显示四(4)个base
图像和一(1)个node
图像。
答案 0 :(得分:943)
试试docker rmi node
。这应该工作。
查看所有创建的容器就像docker ps -a
一样简单。
要删除所有现有容器(不是图片!),请运行docker rm $(docker ps -aq)
答案 1 :(得分:536)
以下是删除docker镜像/容器的一些方法:
docker rmi image_name:version/image-id
docker rmi $(docker images -qf "dangling=true")
docker rm $(docker kill $(docker ps -aq))
注意:将kill
替换为stop
以便正常关闭
使用grep删除除my-image
和ubuntu
docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})
或(没有awk)
docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
答案 2 :(得分:190)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
答案 3 :(得分:63)
使用图像ID从Docker中删除图像:
获取所有图片列表
docker images
标识要删除的图像的图像ID,例如:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
kweku360/java latest 08d3a9b8e166 2 weeks ago 5.733 GB`
最后使用图像ID删除图像(仅需要前三位数字)
docker rmi 08d
答案 4 :(得分:32)
泊坞窗图片
docker rmi image_name
docker rmi -f image_name
docker ps -a
docker rm container_id
docker rm -f container_id
答案 5 :(得分:27)
更新,由VonC在 How to remove old Docker containers 中评论。
使用Docker 1.13(2016年第4季度),您现在拥有:
docker system prune
将删除所有未使用的数据(即按顺序:容器停止,没有容器的卷和没有容器的图像)。
请参阅PR 26108和commit 86de7c0,它们引入了一些新命令,以帮助显示Docker守护程序数据在磁盘上占用多少空间并允许轻松清理"不需要&# 34;过量。
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
答案 6 :(得分:21)
删除特定容器
docker rm CONTAINER_ID CONTAINER_ID
对于单张图片
docker rm 70c0e19168cf
适用于多张图片
docker rm 70c0e19168cf c2ce80b62174
删除已退出的容器
docker ps -a -f status=exited
删除所有容器
docker ps -q -a | xargs docker rm
<小时/>
docker rmi IMAGE_ID
删除特定图片
单张图片
docker rmi ubuntu
用于多张图片
docker rmi ubuntu alpine
删除悬空图片
悬空图像是与任何标记图像无关的图层,因为Docker图像由多个图像组成。
docker rmi -f $(docker images -f dangling=true -q)
删除所有Docker镜像
docker rmi -f $(docker images -a -q)
要列出卷,请运行docker volume ls
删除特定卷
docker volume rm VOLUME_NAME
删除悬空卷
docker volume rm $(docker volume ls -f dangling=true -q)
删除容器及其卷
docker rm -v CONTAINER_NAME
答案 7 :(得分:19)
<强> docker rm container_name
强>
<强> docker rmi image_name
强>
docker help
删除一个或多个容器
删除一张或多张图片
答案 8 :(得分:13)
docker rmi 91c95931e552
来自守护进程的错误响应:冲突,无法删除91c95931e552因为容器76068d66b290正在使用它,请使用-f强制 FATA [0000]错误:无法删除一个或多个图像
查找容器ID
# docker ps -a
# docker rm daf644660736
答案 9 :(得分:4)
首先,我们必须停止并删除与我们要删除的Docker镜像相连的Docker容器。
为此,首先
docker stop container-id
- 停止正在运行的容器docker rm container-id
- 删除/删除容器然后,
docker rmi image-id
- 删除/删除图片答案 10 :(得分:2)
对于1.13及更高版本:
docker image rm [OPTIONS] IMAGE [IMAGE...]
比较
docker image rm
的{{3}}和docker rmi
的{{3}}, [OPTIONS]
似乎没有区别。
--force , -f Force removal of the image
--no-prune Do not delete untagged parents
来自:documention
CLI重组
在Docker 1.13中,我们重新组合了每个命令,使其位于与其交互的逻辑对象下。例如,
list
和start
容器现在是docker container
的子命令,而history
是docker image
的子命令。这些更改让我们可以清理Docker CLI语法,改进帮助文本并使Docker更易于使用。 仍支持旧命令语法,但我们鼓励大家采用新语法。
答案 11 :(得分:1)
如果您想自动/定期清理已退出的容器并删除正在运行的容器未使用的图像和卷,则可以下载图像meltwater/docker-cleanup
。
我在生产中使用它,因为我们每天在多台服务器上部署几次,而且我不想去每个服务器清理(这会很痛苦)。
跑步:
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
答案 12 :(得分:1)
Docker提供了一些命令来删除images
。
显示/删除
Images
:
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)
此外,您还可以使用
filter
参数在以下位置删除一组图像 一次:
示例:
$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>")
答案 13 :(得分:1)
使用
删除所有这些内容第1步:杀死所有容器
for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker kill $i ; done
第2步:首先给他们取消
for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker rm $i ; done
步骤3:使用强制删除图像
for i in `sudo docker images | awk '{ print $3}'`; do sudo docker rmi --force $i ; done
如果您收到错误,说明由于子项依赖性而无法删除
,请使用步骤1答案 14 :(得分:1)
这是一个用于删除已标记(已命名)图像及其容器的shell脚本。 保存为docker-rmi并使用&#39; docker-rmi my-image-name&#39;
运行#!/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
答案 15 :(得分:0)
为什么没人提到docker-compose
!我刚刚使用了一个星期,没有它我将无法生存。您所需要的只是编写一个仅需几分钟学习的yml,然后就可以开始了。它可以引导映像,容器(在所谓的服务中是必需的),并让您像使用docker native命令一样查看日志。尝试一下:
docker-compose up -d
docker-compose down --rmi 'local'
在使用docker-compose之前,我编写了自己的shell脚本,然后必须在需要时自定义脚本,尤其是在应用程序体系结构更改时。现在,借助docker-compose,我不再需要这样做。
答案 16 :(得分:-1)
列出图片:
ahanjura@ubuntu:~$ sudo docker images
存储标签图像ID已创建大小 88282f8eda00 19秒前308.5 MB 13e5d3d682f4 19小时前663 MB busybox2最新05fe66bb1144 20小时前1.129 MB ubuntu 16.04 00fd29ccc6f1 5天前110.5 MB ubuntu 14.04 67759a80360c 5天前221.4 MB python 2.7 9e92c8430ba0 7天前680.7 MB busybox最近6ad733544a63 6周前1.129 MB ubuntu 16.10 7d3f705d307c 5个月前106.7 MB
删除图片:
ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00
已删除:sha256:88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 删除:sha256:4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 删除:sha256:8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 删除:sha256:b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43
ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4
来自守护程序的错误响应:冲突:无法删除13e5d3d682f4(必须强制) - 停止的容器5593e25eb638正在使用图像
强行删除:
ahanjura@ubuntu:~$ sudo docker rmi -f 13e5d3d682f4
已删除:sha256:13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e 删除:sha256:3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 删除:sha256:5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af 删除:sha256:18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf
答案 17 :(得分:-1)
对我来说,以下工作正常:
> 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
答案 18 :(得分:-2)
在我的情况下,问题是我必须拖曳同名的图像 解决方案是在名称或ID后面添加标签
sudo docker rmi <NAME>:<TAG>
例如:
sudo docker rmi php:7.0.4-fpm