如何删除Docker中的图像?

How does one remove an image in Docker?

我在OS X 10.8.4(Mountain Lion)下运行Vagrant下的Docker,每当我尝试删除保存的图像时,都会得到一个错误:

1
2
$ docker rmi some-image-id
2013/07/15 hh:mm:ss unexpected JSON input

根据rmi帮助,正确的语法是docker rmi IMAGE [IMAGE...],我不知道该如何理解。

如何删除图像?

1
2
3
4
$ docker version
Client version: 0.4.8
Server version: 0.4.8
Go version: go1.1

nbsp;

1
2
3
$docker info
Containers: 1
Images: 3

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


试试docker rmi node。那应该管用。

查看所有创建的容器和docker ps -a一样简单。

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


以下是删除Docker图像/容器的一些方法:

删除单个图像

1
docker rmi image_name:version/image-id

删除所有图像

1
docker rmi $(docker images -qf"dangling=true")

杀死容器并将其移除:

1
docker rm $(docker kill $(docker ps -aq))

注:用stop替换kill,以便正常停机。

删除除"我的图像"以外的所有图像

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

1
docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})

或(不带锥子)

docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))


删除所有Docker容器

1
docker rm $(docker ps -a -q)

删除所有Docker图像

1
docker rmi $(docker images -q)


要使用图像ID从Docker中删除图像,请执行以下操作:

  • 获取所有图像的列表

    1
    docker images
  • 标识要删除的图像的图像ID,例如:

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

    1
    docker rmi 08d

  • 形象:

  • 战略Images)

    docker images

  • remove一图像

    docker rmi image_name

  • 空军一号消除图像

    docker rmi -f image_name

  • 容器:

  • list容器的所有

    docker ps -a

  • remove一容器

    docker rm container_id

  • 空军一号集装箱remove

    docker rm -f container_id


  • 更新,正如VONC在如何删除旧Docker容器中所评论的。

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

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

    请参阅pr 26108和commit 86de7c0,其中引入了一些新命令,以帮助可视化Docker守护进程数据占用磁盘的空间,并允许轻松清除"不需要的"多余空间。

    1
    2
    3
    4
    5
    6
    7
    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


    移除容器

  • 移除特定容器

    1
    docker rm CONTAINER_ID CONTAINER_ID
    • 对于单个图像

      1
      docker rm  70c0e19168cf
    • 对于多个图像

      1
      docker rm  70c0e19168cf c2ce80b62174
  • 移除退出的容器

    1
    docker ps -a -f status=exited
  • 移除所有容器

    1
    docker ps -q -a | xargs docker rm
  • 去除图像

    1
    docker rmi IMAGE_ID
  • 删除特定图像

    • 对于单个图像

      1
      docker rmi ubuntu
    • 对于多个图像

      1
      docker rmi ubuntu alpine
  • 删除悬空图像悬空图像是与任何标记图像没有关系的层,因为Docker图像由多个图像组成。

    1
    docker rmi -f $(docker images -f dangling=true -q)
  • 删除所有Docker图像

    1
    docker rmi -f $(docker images -a -q)
  • 正在删除卷

    要列出卷,请运行docker volume ls

  • 删除特定卷

    1
    docker volume rm VOLUME_NAME
  • 删除悬空卷

    1
    docker volume rm $(docker volume ls -f dangling=true -q)
  • 移除容器及其卷

    1
    docker rm -v CONTAINER_NAME

  • docker rm container_name

    docker rmi image_name

    docker help

    rm Remove one or more containers

    rmi Remove one or more images


    1
    docker rmi  91c95931e552

    Error response from daemon: Conflict, cannot delete 91c95931e552 because the container 76068d66b290 is using it, use -f to force
    FATA[0000] Error: failed to remove one or more images

    查找容器ID,

    1
    2
    3
    # docker ps -a

    # docker rm  daf644660736


    首先,我们必须停止并移除附带有我们要移除的Docker图像的Docker容器。

    因此,首先

    • docker stop container-id—停止运行集装箱
    • docker rm container-id—删除/移除容器

    然后,

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

    为1.13和高等的版本:

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

    比较:

    • 《医学文献docker image rm
    • 《大学docker rmi文件,

    [OPTIONS]似乎不差。

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

    从介绍:1.13码头工人

    CLI restructured

    In Docker 1.13, we regrouped every command to sit under the logical object it’s interacting with. For example list and start of containers are now subcommands of docker container and history is a subcommand of docker image.

    These changes let us clean up the Docker CLI syntax, improve help text and make Docker simpler to use. The old command syntax is still supported, but we encourage everybody to adopt the new syntax.


    码头工人提供了一些命令images除去。

    Show/Remove Images:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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)

    Also, you can also use filter parameters to remove set of images at
    once:

    实例:

    1
    2
    3
    $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

    所以你可以删除过滤器,这样的形象:

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

    下面是一个shell脚本,用于删除带标记(已命名)的图像及其容器。另存为docker rmi并使用"docker rmi my image name"运行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/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


    使用删除所有内容

    步骤1:杀死所有容器

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

    第二步:先给他们打电话

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

    第3步:使用强制删除图像

    1
    for i in `sudo docker images | awk '{ print $3}'`; do  sudo docker rmi --force $i ; done

    使用步骤1,以防出现错误,说明由于子项依赖而无法删除该步骤。


    如果要自动/定期清理退出的容器并删除运行中的容器未使用的映像和卷,可以下载映像meltwater/docker-cleanup

    我在生产环境中使用它,因为我们一天在多个服务器上部署几次,我不想去每个服务器进行清理(这会很痛苦)。

    只是运行:

    1
    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
    2
    3
    4
    5
    > 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

    然后继续运行以下命令删除图像:

    1
    2
    3
    > docker rmi debian:jessie
    > docker rmi ubuntu:yakkety
    > docker rmi alipine:3.5


    诡计:Images)

    1
    ahanjura@ubuntu:~$ sudo docker images

    REPOSITORY TAG IMAGE ID CREATED SIZE
    88282f8eda00 19 seconds ago 308.5 MB
    13e5d3d682f4 19 hours ago 663 MB
    busybox2 latest 05fe66bb1144 20 hours ago 1.129 MB
    ubuntu 16.04 00fd29ccc6f1 5 days ago 110.5 MB
    ubuntu 14.04 67759a80360c 5 days ago 221.4 MB
    python 2.7 9e92c8430ba0 7 days ago 680.7 MB
    busybox latest 6ad733544a63 6 weeks ago 1.129 MB
    ubuntu 16.10 7d3f705d307c 5 months ago 106.7 MB

    资料图片:

    1
    ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

    Deleted: sha256:88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194
    Deleted: sha256:4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9
    Deleted: sha256:8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8
    Deleted: sha256:b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

    1
    ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

    Error response from daemon: conflict: unable to delete 13e5d3d682f4 (must be forced) - image is being used by stopped container 5593e25eb638

    delete市力:

    1
    ahanjura@ubuntu:~$ sudo docker rmi -f 13e5d3d682f4

    Deleted: sha256:13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e
    Deleted: sha256:3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378
    Deleted: sha256:5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af
    Deleted: sha256:18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf