如何删除Docker中的图像?

时间:2013-07-15 22:56:02

标签: docker

我在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图像。

19 个答案:

答案 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以便正常关闭

删除除“my-image”

以外的所有图像

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

答案 2 :(得分:190)

删除所有泊坞窗容器

docker rm $(docker ps -a -q)

删除所有泊坞窗图像

docker rmi $(docker images -q)

答案 3 :(得分:63)

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

  1. 获取所有图片列表

    docker images
    
  2. 标识要删除的图像的图像ID,例如:

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
    
  3. 最后使用图像ID删除图像(仅需要前三位数字)

    docker rmi 08d
    

答案 4 :(得分:32)

图像:

  1. 列出图片
      

    泊坞窗图片

  2. 删除一张图片
      

    docker rmi image_name

  3. 强制删除一张图片
      

    docker rmi -f image_name

  4. 集装箱:

    1. 列出所有容器
        

      docker ps -a

    2. 删除一个容器
        

      docker rm container_id

    3. 强制删除一个容器
        

      docker rm -f container_id

答案 5 :(得分:27)

更新,由VonC在 How to remove old Docker containers 中评论。

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

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

请参阅PR 26108commit 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)

删除容器

  1. 删除特定容器

    docker rm CONTAINER_ID CONTAINER_ID
    
    • 对于单张图片

      docker rm  70c0e19168cf
      
    • 适用于多张图片

      docker rm  70c0e19168cf c2ce80b62174
      
  2. 删除已退出的容器

    docker ps -a -f status=exited
    
  3. 删除所有容器

    docker ps -q -a | xargs docker rm
    
  4. <小时/>

    删除图像

    docker rmi IMAGE_ID
    
    1. 删除特定图片

      • 单张图片

        docker rmi ubuntu
        
      • 用于多张图片

        docker rmi ubuntu alpine
        
    2. 删除悬空图片
      悬空图像是与任何标记图像无关的图层,因为Docker图像由多个图像组成。

      docker rmi -f $(docker images -f dangling=true -q)
      
    3. 删除所有Docker镜像

      docker rmi -f $(docker images -a -q)
      
    4. 删除卷

      要列出卷,请运行docker volume ls

      1. 删除特定卷

        docker volume rm VOLUME_NAME
        
      2. 删除悬空卷

        docker volume rm $(docker volume ls -f dangling=true -q)
        
      3. 删除容器及其卷

        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中,我们重新组合了每个命令,使其位于与其交互的逻辑对象下。例如,liststart容器现在是docker container的子命令,而historydocker 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