ChatGPT解决这个技术问题 Extra ChatGPT

如何删除 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 图像。

你用的是什么版本的docker?你能粘贴'docker version'和'docker info'的输出吗?我刚和主人一起试过,效果很好。
我已经用该信息更新了问题。
docker info 显示图片的实际数量,您可以尝试 ./docker images -a -q | sort | uniq | wc -l 它应该是相同的结果(-a 表示所有图像,-q 仅表示 id)。 docker ps 仅显示活动容器,您可以执行 docker ps -a 列出所有容器
您可以尝试使用 -D 选项和客户端启动 docker 守护程序吗? docker -d -D& ; docker -D rmi <id>。你也可以试试CID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $ID吗?
看看这个拉取请求:github.com/dotcloud/docker/pull/1225

A
Anthony

试试 docker rmi node。那应该行得通。

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

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


如果您的某些容器仍在运行,您可以运行: docker stop $(docker ps -qa) 来停止所有容器。我认为删除正在运行的容器可能不起作用,至少我记得我遇到过这个问题。我可能错了她...我检查了手册页,它支持我的假设:“-f,--force=true|false 强制删除正在运行的容器。默认值为 false。”
啊,我不知道“删除所有现有容器”的命令。自己写过:docker ps -a | sed -r 's/^(\w+).*/\1/g' | sed -r 's/^CONTAINER//' | sed -r 's/^(\w+)/docker rm \1/g' | awk 'system($0)' 谢谢!
当您需要使用特定于 shell 的功能来实现基本功能时,您知道命令行选项的设计很糟糕。
要删除所有现有图像,您可以使用 -“ docker rmi $(docker images -q)”
使用 windows powershell 删除所有现有容器:docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
S
Sunny

以下是一些删除 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))


添加:删除“悬空”图像(没有标签的图像):docker rmi $(docker images -qf "dangling=true")
应该是docker rm $(docker kill $(docker ps -a -q))
没有 awk 的“删除所有除外”:docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
@kolypto “dangling = true”似乎最终不会删除非悬空容器。再次运行,减去 -f 和悬挂标志以删除其余部分。
只是我,还是最后一个建议(或(没有awk))没有真正起作用?
A
A.B.

删除所有 docker 容器

docker rm $(docker ps -a -q)

删除所有 docker 镜像

docker rmi $(docker images -q)

删除未标记的图像:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
eq8.eu/blogs/23-spring-cleaning-for-webdevelopers sudo docker rmi -f $(sudo docker images | grep "<none>" | awk "{print \$3}") 然后删除 2015 年的实时发布标签(例如 live-20150121223),我们可以这样做 sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
要强制它,您必须编写: docker -f rm $(docker ps -a -q)
P
Peter Mortensen

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

获取所有Images的列表 docker images 标识你要删除的镜像的镜像ID,例如:REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE kweku360/java latest 08d3a9b8e166 2 week ago 5.733 GB`最后使用镜像ID删除镜像(只需要前三位)docker rmi 08d


第一个需要停止容器并将其删除,请参阅stackoverflow.com/questions/21398087/…
F
Felipe Augusto

图片:

列出图片 docker images 移除一张图片 docker rmi image_name 强制移除一张图片 docker rmi -f image_name

容器:

列出所有容器 docker ps -a 删除一个容器 docker rm container_id 强制删除一个容器 docker rm -f container_id


P
Peter Mortensen

更新,正如 VonC 在 How to remove old Docker containers 中所评论的那样。

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

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

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

感谢您的彻底回答,但这并不能直接回答原始问题(已经回答,其最佳答案仍然相关)。
我同意。然而,由于这个问题的标题非常笼统,这已经成为一个参考问题,所以我认为对机制进行更新已经到位。
P
Peter Mortensen

移除容器

删除特定容器 docker rm CONTAINER_ID CONTAINER_ID 对于单个图像 docker rm 70c0e19168cf 对于多个图像 docker rm 70c0e19168cf c2ce80b62174 删除退出的容器 docker ps -a -f status=exited 删除所有容器 docker ps -q -a | xargs 码头工人 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


为什么要加倍 CONTAINER_ID
K
KunMing Xie

docker rm container_name

docker rmi image_name

docker help rm 移除一个或多个容器 rmi 移除一个或多个图像


P
Peter Mortensen
docker rmi  91c95931e552

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

查找容器 ID,

# docker ps -a

# docker rm  daf644660736 

这是问题的答案吗?
为什么是daf644660736?这与之前的任何一个有什么关系?
P
Peter Mortensen

首先,我们必须停止并删除与我们要删除的 Docker 映像附加的 Docker 容器。

所以为此,首先

docker stop container-id - 停止正在运行的容器

docker rm container-id - 删除/移除容器

然后,

docker rmi image-id - 删除/移除镜像


C
Community

对于 1.13 及更高版本:

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

比较:

docker image rm 的文档和

docker rmi 的文档,

[OPTIONS] 似乎没有区别。

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

来自:Introducing Docker 1.13

CLI 重组 在 Docker 1.13 中,我们将每个命令重新组合到与之交互的逻辑对象下。例如,容器的列表和启动现在是 docker 容器的子命令,而历史记录是 docker 映像的子命令。这些更改让我们可以清理 Docker CLI 语法、改进帮助文本并使 Docker 更易于使用。旧的命令语法仍受支持,但我们鼓励大家采用新的语法。


P
Peter Mortensen

Docker 提供了一些命令来删除 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)

此外,您还可以使用过滤器参数一次删除一组图像:

例子:

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

c
chandank

使用删除所有这些

第 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,以防您收到错误说由于子依赖项而无法删除它


P
Peter Mortensen

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


A
Alex M

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

#!/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

您需要 xargs -r 使其在无匹配容器情况下工作。
A
Amirouche Zeggagh

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

sudo docker rmi <NAME>:<TAG>

前任:

sudo docker rmi php:7.0.4-fpm

T
Tiina

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

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

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


docker-compose 是一种编排工具,通常不适合在简单项目中使用。在这个问题的上下文中,独立的 docker 解决方案(不需要使用经常使用的 docker-compose.yml 配置)更可取。此外,这里已经有很多 很多 好的答案。
@Jules 没有人提到 docker-compose 并不意味着它们是错误的答案,也不意味着这也是一个无助的答案。 Docker 原生命令还不错,但很乏味,每次都需要大量输入。 “一个很好,两个太多了”。
J
Julisch

对我来说,以下工作正常:

> 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

F
Felipe Augusto

列表图像:

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 最新 6ad733544a63 6 周前 1.129 MB ubuntu 16.10 7d3f705d307c 5 个月前 106.7 MB

删除图像:

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

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

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

来自守护程序的错误响应:冲突:无法删除 13e5d3d682f4(必须强制)- 已停止的容器 5593e25eb638 正在使用图像

强制删除:

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

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