如何删除Docker映像?

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

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

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

如何删除图像?

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

 

$docker infoContainers: 1Images: 3

有趣的是,当我运行docker ps时,根本没有显示容器。运行docker images显示了四(4)个base图像和一(1)个node图像。

706095 次浏览

尝试docker rmi node。这应该有效。

查看所有创建的容器就像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))

注意:将kill替换为stop以实现优雅的关闭

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

使用grep删除除my-imageubuntu之外的所有内容

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))

删除所有docker容器

docker rm $(docker ps -a -q)

删除所有docker镜像

docker rmi $(docker images -q)

要使用图像ID从Docker中删除图像:

  1. 获取所有图像的列表

    docker images
  2. Identify the image ID of the image you want to delete, for example:

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZEkweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
  3. Finally remove the image using the image ID (only the first three digits are required)

    docker rmi 08d
docker rmi  91c95931e552

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

查找容器ID,

# docker ps -a
# docker rm  daf644660736

这是一个外壳脚本,用于删除标记(命名)图像及其容器。保存为docker-rmi并使用'docker-rmi my-image e-name'运行

#!/bin/bash
IMAGE=$1
if [ "$IMAGE" == "" ] ; thenecho "Missing image argument"exit 2fi
docker ps -qa -f "ancestor=$IMAGE" | xargs docker rmdocker rmi $IMAGE

docker rm container_name

docker rmi image_name

docker help

rm删除一个或多个容器

rmi删除一个或多个图像

更新,正如VonC在如何删除旧的Docker容器中评论的那样。

使用Docker 1.13(2016年第四季度),您现在拥有:

docker system prune将删除所有未使用的数据(即,按顺序:停止的容器、没有容器的卷和没有容器的图像)。

请参阅p26108提交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 themAre you sure you want to continue? [y/N] y

移除容器

  1. 删除特定的容器

    docker rm CONTAINER_ID CONTAINER_ID
    • 对于单个图像

      docker rm  70c0e19168cf
    • For multiple images

      docker rm  70c0e19168cf c2ce80b62174
  2. Remove exited containers

    docker ps -a -f status=exited
  3. Remove all the containers

    docker ps -q -a | xargs docker rm


Removing Images

docker rmi IMAGE_ID
  1. 删除特定图像

    • 对于单个图像

      docker rmi ubuntu
    • for multiple images

      docker rmi ubuntu alpine
  2. Remove dangling images
    Dangling images are layers that have no relationship to any tagged images as the Docker images are constituted of multiple images.

    docker rmi -f $(docker images -f dangling=true -q)
  3. Remove all Docker images

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

Removing Volumes

To list volumes, run docker volume ls

  1. Remove a specific volume

    docker volume rm VOLUME_NAME
  2. Remove dangling volumes

    docker volume rm $(docker volume ls -f dangling=true -q)
  3. Remove a container and its volumes

    docker rm -v CONTAINER_NAME

如果您想自动/定期清理退出的容器并删除正在运行的容器未使用的映像和卷,您可以下载映像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

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

> docker imagesREPOSITORY   TAG           IMAGE ID          CREATED             SIZEdebian       jessie        86baf4e8cde9      3 weeks ago         123MBubuntu       yakkety       7d3f705d307c      3 weeks ago         107MBalpine       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-删除/删除图像

删除所有使用

步骤1:杀死所有容器

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker kill $i ; done

第2步:先RM它们

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

对于1.13及更高版本:

docker image rm [OPTIONS] IMAGE [IMAGE...]

比较:

[OPTIONS]似乎没有区别。

--force , -f        Force removal of the image--no-prune          Do not delete untagged parents

来自:介绍Docker 1.13

CLI重组

在Docker 1.13中,我们将每个命令重新组合到它正在与之交互的逻辑对象下。例如,容器的liststart现在是docker container的子命令,historydocker image的子命令。

这些更改使我们能够清理Docker CLI语法,改进帮助文本并使Docker更易于使用。仍然支持旧的命令语法,但我们鼓励每个人采用新语法

列表图片:

ahanjura@ubuntu:~$ sudo docker images

存储库标签图像ID创建大小88282f8eda00 19秒前308.5 MB13e5d3d682f4 19小时前663 MBbusybox最新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: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

图片:

  1. 列表图片

    docker镜像

  2. 删除一个图像

    docker rmiimage_name

  3. 强制删除一个图像

    docker rmi-fimage_name

容器:

  1. 列出所有容器

    docker ps-a

  2. 删除一个容器

    docker rmcontainer_id

  3. 强制删除一个容器

    docker rm-fcontainer_id

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

显示/删除Images

docker imagesdocker images -a # All imagesdocker images --no-trunc # List the full length image IDs
docker images --filter "dangling=true" // Show unstage imagesdocker 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 imagesdocker 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>")

在我的情况下,问题是我有两个同名的图像解决方法是在名称或id后添加标签

sudo docker rmi <NAME>:<TAG>

例如:

sudo docker rmi php:7.0.4-fpm

为什么没有人提到docker-compose!我刚刚使用了一个星期,没有它我无法生存。你所需要的只是编写一个yml,它只需要几分钟的学习,然后你就可以开始了。它可以启动映像、容器(所谓的服务中需要这些),并让你像使用docker原生命令一样查看日志。试一试:

docker-compose up -ddocker-compose down --rmi 'local'

在我使用docker-compose之前,我编写了自己的外壳脚本,然后我必须在需要时自定义脚本,特别是当应用程序架构发生变化时。现在我不必再这样做了,多亏了docker-compose。

  • 首先使用以下命令列出所有存在的图像:

    docker镜像

用于删除单个图像

  • 使用docker rmi[图像名称(或)图像ID]//这将仅删除该特定图像

用于删除所有图像

  • 使用docker rmi-f$(docker图像-a-q)