这个问题与我是否应该关注多余的、非运行的 Docker 容器有关?.
我想知道如何删除旧容器。docker rm 3e552code34a
可以让你删除一个,但我已经有很多了。docker rm --help
不提供选择选项(如全部或按图像名称)。
也许有一个存储这些容器的目录,我可以轻松地手动删除它们?
这个问题与我是否应该关注多余的、非运行的 Docker 容器有关?.
我想知道如何删除旧容器。docker rm 3e552code34a
可以让你删除一个,但我已经有很多了。docker rm --help
不提供选择选项(如全部或按图像名称)。
也许有一个存储这些容器的目录,我可以轻松地手动删除它们?
从Docker 1.13.x 开始,您可以使用Docker container prune:
docker container prune
这将删除所有停止的容器,并且应该以相同的方式在所有平台上工作。
还有一个Docker 系统 prune:
docker system prune
这将在一个命令中清理所有未使用的容器、网络、图像(悬空和未引用)以及可选的卷。
对于较旧的 Docker 版本,您可以将 Docker 命令与其他 Unix 命令串在一起以获得您需要的内容。以下是有关如何清理已使用数周的旧容器的示例:
$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm
值得称赞的是,这个例子来自https://twitter.com/jpetazzo/status/347431091415703552。
我从 Guillaume J. Charmes 那里得到的另一种方法(应得的信用):
docker rm `docker ps --no-trunc -aq`
将以优雅的方式删除所有容器。
Bartosz Bilicki 为 Windows 提供:
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
对于 PowerShell:
docker rm @(docker ps -aq)
Docker 1.13(2016 年第四季度)的更新,归功于VonC(本线程稍后):
docker system prune
将删除所有未使用的数据(即,按顺序:容器停止、没有容器的卷和没有容器的图像)。
请参阅PR 26108和提交 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
更新答案
使用docker system prune
或docker container prune
现在。请参阅VonC 的更新答案。
上一个答案 组合上面的几个不同的提示,删除所有非运行容器的最优雅的方法似乎是:
docker rm $(docker ps -q -f status=exited)
-q
仅打印容器 ID(不带列标题)-f
允许您过滤打印的容器列表(在这种情况下,我们正在过滤以仅显示退出的容器)官方的做法是:
docker rm `docker ps -aq`
Docker 维护人员表示不会有此命令 - 您可以这样编写命令:
我们之前已经讨论过这一点,并且希望用户使用上面的行,而不必向 Docker 添加额外的代码。
使用 Docker 1.13(2016 年第四季度),您现在拥有:
docker system prune -a
将删除所有未使用的数据(即,按顺序:容器停止、没有容器的卷和没有容器的图像)。
docker system prune
没有 -a 将只删除(对于图像)悬空图像,或没有标签的图像,如smilebomb评论的那样。
请参阅PR 26108和提交 86de7c0,其中引入了一些新命令,以帮助可视化 Docker 守护程序数据在磁盘上占用的空间,并允许轻松清理“不需要”的多余空间。
docker system prune -a
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
正如wjv评论的那样,
还有
docker {container,image,volume,network} prune
, 可用于删除仅一种类型对象的未使用实例。
在提交 913e5cb中引入,仅适用于 Docker 1.13+。
docker container prune
2021 年更新(最新)
docker container prune
这 - 2017(旧)方式
删除所有停止的容器
docker rm $(docker ps -a -q)
删除所有容器 (已停止和未停止)
docker rm -f $(docker ps -a -q)
现在可以使用过滤docker ps
:
docker rm $(docker ps -q -f status=exited)
对于图像:
docker rmi $(docker images -q -f "dangling=true")
但是,当没有匹配的容器时,其中任何一个都会导致docker rm
或引发错误。docker rmi
旧的docker rm $(docker ps -aq)
技巧更糟糕,因为它试图删除任何正在运行的容器,每个容器都失败了。
这是一个更简洁的脚本,可以添加到您的~/.bashrc
or中~/.profile
:
# Use `docker-cleanup --dry-run` to see what would be deleted.
function docker-cleanup {
EXITED=$(docker ps -q -f status=exited)
DANGLING=$(docker images -q -f "dangling=true")
if [ "$1" == "--dry-run" ]; then
echo "==> Would stop containers:"
echo $EXITED
echo "==> And images:"
echo $DANGLING
else
if [ -n "$EXITED" ]; then
docker rm $EXITED
else
echo "No containers to remove."
fi
if [ -n "$DANGLING" ]; then
docker rmi $DANGLING
else
echo "No images to remove."
fi
fi
}
编辑:如下所述,最初的答案是删除图像,而不是容器。更新以回答这两个问题,包括文档的新链接。感谢 Adrian(和 Ryan 的回答)提到了新的ps
过滤。
删除所有停止的容器:
docker rm $(docker ps -a | grep Exited | awk '{print $1}')
来自pauk960的评论:
从1.3.0版开始,您可以将过滤器与, 一起使用
docker ps
,而不是grep Exited
使用docker ps -a -f status=exited
. 如果你使用-q
它,你只能获取容器 ID 而不是完整输出,不需要为此使用 awk。
如果您不想删除所有容器,您可以选择在特定容器之前或之后创建的所有容器 withdocker ps -f before=<container-ID>
或 withdocker ps -f since=<container-ID>
假设你已经开发了你的系统,现在它可以工作了,但是还剩下一些容器。您想删除在该工作版本之前创建的容器。使用 确定工作容器的 ID docker ps
。
删除在其他容器之前创建的容器
docker rm $(docker ps -f before=9c49c11c8d21 -q)
另一个例子。您的数据库已经在 Docker 容器上运行。您已经开发了在另一个容器上运行的应用程序,现在您有许多不需要的容器。
删除在某个容器之后创建的容器
docker rm $(docker ps -f since=a6ca4661ec7f -q)
Docker 将容器存储/var/lib/docker/containers
在 Ubuntu 中。我认为额外的容器没有其他危害,但会占用磁盘空间。
更新:从 Docker 版本 1.13(2017 年 1 月发布)开始,您可以发出以下命令来清理停止的容器、未使用的卷、悬空图像和未使用的网络:
docker system prune
如果要确保只删除具有exited
状态的容器,请使用以下命令:
docker ps -aq -f status=exited | xargs docker rm
同样,如果您正在清理 docker 的东西,您可以通过以下方式摆脱未标记、未命名的图像:
docker images -q --no-trunc -f dangling=true | xargs docker rmi
这是我的docker-cleanup
脚本,它删除了未标记的容器和图像。请检查源以获取任何更新。
#!/bin/sh
# Cleanup docker files: untagged containers and images.
#
# Use `docker-cleanup -n` for a dry run to see what would be deleted.
untagged_containers() {
# Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
docker ps -a | awk '$2 ~ "[0-9a-f]{12}" {print $'$1'}'
}
untagged_images() {
# Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
# NOTE: intermediate images (via -a) seem to only cause
# "Error: Conflict, foobarid wasn't deleted" messages.
# Might be useful sometimes when Docker messed things up?!
# docker images -a | awk '$1 == "<none>" {print $'$1'}'
docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'
}
# Dry-run.
if [ "$1" = "-n" ]; then
echo "=== Containers with uncommitted images: ==="
untagged_containers 0
echo
echo "=== Uncommitted images: ==="
untagged_images 0
exit
fi
# Remove containers with untagged images.
echo "Removing containers:" >&2
untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true
# Remove untagged images
echo "Removing images:" >&2
untagged_images 3 | xargs --no-run-if-empty docker rmi
来源:https ://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup
首先,在尝试移除容器之前停止运行容器
docker rm $(docker stop -t=1 $(docker ps -q))
您可以使用kill
而不是stop
. 就我而言,我更喜欢stop
,因为我倾向于重新运行它们而不是每次都创建一个新的,所以我尝试很好地关闭它们。
注意:尝试停止容器会报错:
错误:无法移除正在运行的容器,请先停止它
docker rm $(docker ps -a -q)
从 Windows shell 中删除所有容器:
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
https://github.com/HardySimpson/docker-cleanup
一个小巧的一体式外壳,可移除:
打算作为 crontab 作业运行
<none>:<none>
图像2>/dev/null
是否因此,我个人建议将此作为映像和容器的部署脚本的一部分,只保留最近的 n 个容器和映像。我用我使用的相同版本控制架构标记我的 Docker 映像,git tag
并且总是用“最新”标记最新的 Docker 映像。这意味着在不清理任何东西的情况下,我的 Docker 图像最终看起来像:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
some_repo/some_image 0.0.5 8f1a7c7ba93c 23 hours ago 925.4 MB
some_repo/some_image latest 8f1a7c7ba93c 23 hours ago 925.4 MB
some_repo/some_image 0.0.4 0beabfa514ea 45 hours ago 925.4 MB
some_repo/some_image 0.0.3 54302cd10bf2 6 days ago 978.5 MB
some_repo/some_image 0.0.2 0078b30f3d9a 7 days ago 978.5 MB
some_repo/some_image 0.0.1 sdfgdf0f3d9a 8 days ago 938.5 MB
现在,我当然不想让我所有的图像(或容器)在我所有的生产盒上都永久保存。我只想要最后 3 或 4 个用于回滚并摆脱其他所有内容。Unixtail
是你最好的朋友。由于docker images
和docker ps
都按日期排序,我们可以只使用tail
选择除前三个之外的所有内容并将它们删除:
docker rmi $(docker images -q | tail -n +4)
将其与您的部署脚本(或本地)一起运行,以始终保留足够的图像以轻松回滚,而不会占用太多空间或将旧图像弄乱。
就个人而言,我在任何时候都只在我的生产箱上保留一个容器,但如果你想要更多,你可以对容器做同样的事情:
docker rm $(docker ps -aq | tail -n +4)
最后,在我的简化示例中,我们一次只处理一个存储库,但如果您有更多,您可以使用相同的想法变得更复杂一些。假设我只想保留 some_repo/some_image 中的最后三张图片。我可以混进去grep
然后awk
上路:
docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)
同样,同样的想法也适用于容器,但你现在已经明白了,所以我将不再举例。
采用:
docker rm -f $(docker ps -a -q)
它强制停止并删除本地存在的所有容器。
删除 5 个最旧的容器:
docker rm `docker ps -aq | tail -n 5`
查看还剩多少个容器:
docker ps -aq | wc -l
移除所有停止的容器。
sudo docker rm $(sudo docker ps -a -q)
这将通过使用 docker ps -a -q 获取所有容器的列表并将它们的 id 传递给 docker rm 来删除所有停止的容器。这不应该删除任何正在运行的容器,它会告诉你它不能删除正在运行的图像。
删除所有未标记的图像
现在您要清理旧图像以节省一些空间。
sudo docker rmi $(sudo docker images -q --filter "dangling=true")
删除所有 docker 进程:
docker rm $(docker ps -a -q)
删除特定容器:
$ docker ps -a (lists all old containers)
$ docker rm container-Id
新方法: spotify/docker-gc 玩这个把戏。
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc
它支持环境设置
强制删除具有多个标签的图像
FORCE_IMAGE_REMOVAL=1
强制删除容器
FORCE_CONTAINER_REMOVAL=1
从垃圾收集中排除最近退出的容器和图像
GRACE_PERIOD_SECONDS=86400
此设置还可以防止删除少于 GRACE_PERIOD_SECONDS 秒前创建的图像。
试运行
DRY_RUN=1
清理孤立容器卷 CLEAN_UP_VOLUMES=1
参考:docker-gc
老办法:
删除旧的、非运行的容器
docker ps -a -q -f status=exited | xargs --no-run-if-empty docker rm
OR
docker rm $(docker ps -a -q)
删除所有与非运行的 docker 容器相关的镜像
docker images -q | xargs --no-run-if-empty docker rmi
清理 docker 版本 1.10.x 及更高版本的孤立 docker 卷
docker volume ls -qf dangling=true | xargs -r docker volume rm
基于时间段
docker ps -a | grep "weeks ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
docker ps -a | grep "days ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
docker ps -a | grep "hours ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
您可以使用以下命令删除已退出的容器:
docker rm $(sudo docker ps -a | grep Exit | cut -d ' ' -f 1)
以下是删除 docker 上旧镜像的完整要点:删除旧 Docker 容器和镜像的要点。
#!/bin/bash
# docker-gc --- Remove stopped docker containers
RUNNING=$(docker ps -q)
ALL=$(docker ps -a -q)
for container in $ALL ; do
[[ "$RUNNING" =~ "$container" ]] && continue
echo Removing container: $(docker rm $container)
done
您只能删除已停止的容器。一开始就停止所有这些
docker stop $(docker ps -a -q)
然后你可以删除
docker rm $(docker ps -a -q)
我总是docker rmi $(docker ps -a -q)
用来删除所有图像。
失败/var/lib/docker/graph
时可以删除目录。docker rmi
列出所有容器
docker ps -aq
停止所有正在运行的容器
docker stop $(docker ps -aq)
移除所有容器
docker rm $(docker ps -aq)
删除所有图像
docker rmi $(docker images -q)
注意:首先,您必须先停止所有正在运行的容器,然后才能删除它们。同样在删除图像之前,您必须停止并删除其依赖容器。
试试这个命令来清理容器和悬空图像。
docker system prune -a
我正在使用以下命令删除Exited和Restarting docker 容器
docker stop --force $(docker ps -a|grep Exited| awk '{print $1}')
docker rm --force $(docker ps -a|grep Exited| awk '{print $1}')
docker stop --force $(docker ps -a|grep Restarting| awk '{print $1}')
docker rm --force $(docker ps -a|grep Restarting| awk '{print $1}')
使用以下命令删除名为none的图像
docker image rm --force $(docker image ls |grep none |awk '{print $3}')
docker rm $(docker ps -a | awk '/myimage:mytag/{print $1}')
在 Ubuntu 14.04 (Trusty Tahr) 上:
$ for CON in `docker ps -qa`; do docker rm $CON ; done
这只是一个普通的 Bash 命令,因此它应该适用于每个符合 Bash 的终端。
要删除所有容器:
sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty sudo docker rm -f
解释:
sudo docker ps -a
返回容器列表。
awk '{print $1}'
获取作为容器 ID 的第一列。
grep -v CONTAINER
删除标题。
最后一个管道安全地发送 ID sudo docker rm -f
。
对于任何有兴趣的人,我从 qkrijger 中获取了示例并将其变成了全部清除(停止并全部删除)
docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq`
要简单地删除正在运行的容器当前未使用的所有内容,我通常放入Mac 上的以下alias将有所帮助:.bash_profile
alias dockerclean="docker ps -q -a | xargs docker rm -v && docker images -q | xargs docker rmi"
每当dockerclean
从命令行调用它时,它将删除停止的容器以及未使用的图像层。对于正在运行的容器和使用的图像,它将打印一条警告消息并跳过它。
#!/bin/bash
echo Cleanup unused containers
unused_containers=$(docker ps -a -q --filter="status=exited")
if [[ -n $unused_containers ]]
then
docker rm $unused_containers
fi
echo Cleanup unused images
unused_images=$(docker images | grep '^<none>' | awk '{print $3}')
if [[ -n $unused_images ]]
then
docker rmi $unused_images
fi
docker rm --force `docker ps -qa`
我正在使用:
docker rm -v $(docker ps -a -q -f status=exited)
删除退出的容器和:
docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")
为了摆脱所有未标记的图像。
如果您想自动/定期清理退出的容器并删除正在运行的容器未使用的镜像和卷,您可以下载镜像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 选项设置多长时间)并清理退出的容器和图像。
更多细节:Docker 清理
这是一个脚本,用于删除创建时间超过 2 天的正在运行和已退出的容器:
#!/bin/bash
# This script will kill and remove containers older than 2 days.
#
docker ps -aq > /scripts/containers.txt
today=`date +%Y-%m-%d`
oldate=`date --date="2 day ago" +%Y-%m-%d`
while read p; do
cont=`docker inspect -f '{{ .Created }}' $p | cut -c 1-10`
echo " Created date of $p is $cont"
k=`echo $(( ( $(date -ud $today +'%s') - $(date -ud $cont +'%s'))/60/60/24 ))`
echo $k
if [ $k -ge 2 ];
then
echo "Killing docker container $p"
docker kill $p
echo "Removing docker container $p"
docker rm $p
else
echo "Docker container $p is not one day old, so keeping the container."
fi
done </scripts/containers.txt
此过程包含两个步骤(停止和删除):
停止任何正在运行的微服务正在使用的容器
docker stop $(docker ps -a -q)
移除所有容器
docker rm $(docker ps -a -q)
删除单个容器
docker rm container-ID
我发现下面的命令对于停止和删除所有容器非常方便。-f
如果您使用(force) 标志,则不需要使用另一个命令显式停止,因为它会停止所有正在运行的容器:
docker rm -f $(docker ps -a -q)
使用以下嵌套命令:
$ sudo docker stop $(sudo docker ps -a -q)
此命令停止所有正在运行的容器。
$ sudo docker rm $(sudo docker ps -a -q)
此命令删除所有容器。
要删除所有停止的 docker 容器,请运行:-
$ docker container prune
您必须小心使用此命令,因为它会不加选择地删除所有已停止的容器,因此请确保没有您可能仍在使用的已停止/当前未使用的容器。
更精确的替代方法是按 ID 删除容器。您必须首先使用此命令列出已停止的容器:-
docker ps --filter "status=exited"
然后,您将复制要删除的容器的ID 。此后,执行以下命令删除单个容器,
docker container rm <container ID>
或下面的一个通过运行一次删除多个容器:-
docker container rm <container ID 1> <container ID 2> <container ID n>
我使用以下变体:
docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1
第一部分列出了所有进程。
第二个仅选择具有“cassandra”后跟“Exited”的那些。
第三,删除图像 ID 之后的所有测试,因此您会得到一个图像 ID 列表。
所以,
docker rm $(docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1)
对于 Linux 安装,请确保使用sudo。寻找几个月和几周前的图像也很好:
sudo docker ps -a | grep 'weeks ago\|months ago' | \
awk '{print $1}' | xargs --no-run-if-empty sudo docker rm
您可以使用存储库https://github.com/kartoza/docker-helpers中的 docker-helper 。安装后,只需输入drmc
.
这两行 Bash 将在删除容器之前按一些关键字过滤容器:
containers_to_keep=$(docker ps -a | grep 'keep\|Up\|registry:latest\|nexus' | awk '{ print $1 }')
containers_to_delete=$(docker ps -a | grep Exited | grep -Fv "$containers_to_keep" | awk '{ print $1 }')
docker rm $containers_to_delete
从这个帖子。
这个简短的脚本可能会有所帮助(根据以前的答案编译)!
#!/bin/bash
# Remove dangling images
IMAGE_IDS=$(sudo docker images -f "dangling=true" -q)
if [ -n "$IMAGE_IDS" ]; then
sudo docker rmi $IMAGE_IDS > /dev/null 2>&1
echo 'Images removed' $IMAGE_IDS
fi
# Remove exited containers
CONTAINER_IDS=$(sudo docker ps -a -q -f status=exited)
if [ -n "$CONTAINER_IDS" ]; then
sudo docker rm -v $CONTAINER_IDS > /dev/null 2>&1
echo 'Containers remove $CONTAINER_IDS'
fi
根据我的经验,您应该在删除容器之前停止容器,以避免出现“此容器仍在运行”之类的错误,因此:
sudo /usr/bin/docker ps -aq | awk '{print $1}' | \
xargs --no-run-if-empty bash -c 'sudo docker stop $@; sudo docker rm $@' bash
我在我的点文件中保留了一个别名,例如:
alias wipedocker="sudo /usr/bin/docker ps -aq | awk '{print $1}' \
| xargs --no-run-if-empty bash -c 'sudo docker stop $@; sudo docker rm $@' bash"
docker rm -f $(docker ps -a -q)
会成功的。它会停止容器并移除它们。
删除旧的 Docker 容器非常容易。
列出所有容器:
docker ps -a
docker ps (To list the running containers)
一旦您点击docker ps -a
,它将为您提供容器列表以及容器 ID(它是唯一的,并且是 az、AZ 和 0-9 的组合)。复制您要删除的容器 ID,然后点击下面的内容。
docker rm container_id
您的容器将与在其中创建的层一起被删除/var/lib/docker/aufs
(如果您使用的是 Ubuntu)。
这是一个删除所有退出容器的单线。
docker rm $(docker ps -a | grep Exited | grep -v CON | awk '{print $1}')
如果你想删除所有图像,你可以使用这样的东西。
docker rmi $(docker images | sed -n '1!p' | awk '{print $3}')
删除指定容器
docker container rm container_id
如果容器正在运行,你必须先停止它才能删除它
docker container stop container_id
而这个命令就是删除所有现有的容器
docker container rm $(docker container -a -q)
使用 docker 管理工具 Portainer
我们可以使用此工具管理所有旧容器,不使用卷和图像
它是一个简单的码头工人管理 UI
如何部署 PORTAINER
使用以下 Docker 命令部署 Portainer:
$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
您只需要使用浏览器访问正在运行 portainer 的 Docker 引擎的端口 9000。
注意:该-v /var/run/docker.sock:/var/run/docker.sock
选项只能在 Linux 环境中使用。
列出所有容器(仅 ID)
docker ps -aq
停止所有正在运行的容器
docker stop $(docker ps -aq)
移除所有容器
docker rm $(docker ps -aq)
删除所有图像
docker rmi $(docker images -q)
要摆脱停止的容器,您可以使用:
docker rm <cointainer_id>
您还可以使用容器的名称:
docker rm <name>
如果你想摆脱所有停止的容器,你可以使用:
docker container prune
或者你也可以使用:
docker rm $(docker ps -aq -f status=exited)
您可以使用-v
参数删除任何未进一步引用的 docker 托管卷
docker rm -v $(docker ps -aq -f status=exited)
您也可以--rm
与docker run
. 当容器存在时,这将删除容器和关联的文件。
您可以使用多种方式删除容器,我将在其余答案中解释它们。
docker container prune
. 此命令删除所有当前不工作的容器。docker ps
您可以通过比较和的输出来找出哪些容器不工作docker ps -a
。列出但docker ps -a
不存在docker ps
的容器现在无法正常工作,但它们的容器不会被删除。
docker kill $(docker ps -aq)
. 该命令的作用是通过执行$(docker ps -aq)
它返回所有容器的 id 列表并杀死它们。有时此命令不起作用,因为正在运行的容器正在使用它。为了使这项工作,您可以使用--force
选项。
docker rm $(docker ps -aq)
. 它与第二个命令具有相同的定义。它们的唯一区别是它删除了容器(与 docker prune 相同),而docker kill
没有。
有时需要删除映像,因为您更改了配置,Dockerfile
需要将其删除以重建它。为此,您可以通过运行查看所有图像docker images
,然后复制要删除的图像的 ID。只需执行即可将其删除docker image rm <image-id>
。
PS:可以用docker ps -a -q
代替,docker ps -aq
没有区别。因为在基于 unix 的操作系统中,您可以像上面的示例一样加入选项。
如果要删除所有容器,请使用
码头集装箱修剪
此命令将删除所有容器
为什么不清理整个 docker 系统
码头工人系统修剪
我想添加这个简单的答案,因为我没有看到它,而且这个问题特别是“旧”而不是“全部”。
sudo docker container prune --filter "until=24h"
调整 24h 以适应您想要删除旧容器的任何时间跨度。
在 windows (powershell) 上,您可以执行以下操作:
要删除所有 docker,: docker system prune -a
使用以下命令了解容器 ID
docker ps
然后使用以下命令停止它。
docker kill <container-id>
查看所有现有图像:
docker images -a
查看所有现有容器:
docker ps -a
删除单个图像:
docker images -a
docker rmi <IMAGE_ID>
停止单个容器:
docker ps -a
docker stop <CONTAINER_ID>
停止多个容器:
docker ps -a
docker stop <CONTAINER_ID1> <CONTAINER_ID2>
删除单个容器:
docker ps -a
docker rm <CONTAINER_ID>
删除多个图像:
docker images -a
docker rmi <IMAGE_ID1> <IMAGE_ID2>
删除多个停止的容器:
docker ps -a
docker rm <CONTAINER_ID1> <CONTAINER_ID2>
在一个命令中删除容器和图像:
docker rm $(docker ps -a -q) && docker rmi -f $(docker images -a -q)
修剪所有容器:
docker container prune
您可以使用一些 Docker UI 应用程序来删除容器。
对不起广告,但我总是使用自己的应用程序来做同样的事情。如果您正在寻找一个简单的应用程序来管理 Docker 映像或容器,您可以尝试一下:https ://github.com/alex-agency/AMHub 。
这是一个在 Docker 容器中运行的 Docker UI Web 应用程序。要安装它,您只需要调用此命令:
docker run -d -p 80:80 -p 8000:8000 -e DOCKER=$(which docker) -v /var/run/docker.sock:/docker.sock alexagency/amhub
我建议您先停止图像,然后再删除。
你可以这样:
$ docker stop $(docker ps -a)
$ docker rm $(docker ps -a)
您可以停止 docker 容器,一旦停止,您就可以移除容器。
停止容器:
$ docker stop "containerID" - 你也可以提到容器 ID 的前两个字母,它可以工作。
取出容器
$ docker rm "containerID" - 同样你也可以提到容器的前两个字母
如果这些命令不允许您停止/删除容器,请确保您对 docker 主机具有sudo访问权限。