此问题与 Should I be concerned about excess, non-running, Docker containers? 。
有关我想知道如何移除旧容器。 docker rm 3e552code34a
允许您删除一个,但我已经有很多。 docker rm --help
未提供选择选项(例如全部或按图片名称)。
也许有一个存储这些容器的目录,我可以手动轻松删除它们?
答案 0 :(得分:1261)
Docker 1.13.x中有一项名为Docker container prune的新功能:
docker container prune
这将做你想要的,并且应该以相同的方式在所有平台上工作。
还有Docker system prune:docker system prune
,它将在一个命令中清理容器,图像,卷和网络。
原始答案:
有一些关于Docker清理命令的讨论。您可以在此门票上找到相关信息: Implement a 'clean' command (#928)
在该命令可用之前,您可以将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。
答案 1 :(得分:611)
另一种方法,我从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年第4季度)进行更新,归功于VonC(later in this thread):
docker system prune
将删除所有未使用的数据(即按顺序:容器停止,没有容器的卷和没有容器的图像)。
请参阅PR 26108和commit 86de7c0,它们引入了一些新命令,以帮助显示Docker守护程序数据在磁盘上占用多少空间,并允许轻松清理“不需要的”多余部分。 / p>
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
答案 2 :(得分:405)
更新了答案
立即使用docker system prune
或docker container prune
。请参阅VonC's updated answer。
上一个答案 根据上面的几个不同提示,删除所有非运行容器的最优雅方法似乎是:
docker rm $(docker ps -q -f status=exited)
-q
只打印容器ID(没有列标题)-f
允许您过滤打印容器列表(在这种情况下,我们过滤只显示已退出的容器)答案 3 :(得分:249)
docker rm `docker ps -aq`
Docker维护者已经表示没有命令 - 你可以编写这样的命令:
我们之前已经讨论过此,并且希望用户使用上述代码而无需向Docker添加其他代码。
答案 4 :(得分:124)
使用Docker 1.13(2016年第4季度),您现在拥有:
docker system prune -a
将删除所有未使用的数据(即按顺序:容器停止,没有容器的卷和没有容器的图像)。
docker system prune
只会删除(对于图像)只有悬空图片或没有标记的图片commented smilebomb。
请参阅PR 26108和commit 86de7c0,它们引入了一些新命令,以帮助显示Docker守护程序数据在磁盘上占用多少空间,并允许轻松清理“不需要的”多余部分。 / p>
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
,可用于删除仅一个类型对象的未使用实例。
在commit 913e5cb中引入,仅适用于Docker 1.13 +。
docker container prune
答案 5 :(得分:103)
现在可以将filtering与docker ps
:
docker rm $(docker ps -q -f status=exited)
对于images:
docker rmi $(docker images -q -f "dangling=true")
但是,如果没有匹配的容器,任何这些都会导致docker rm
或docker rmi
抛出错误。较旧的docker rm $(docker ps -aq)
技巧更糟糕,因为它试图移除任何正在运行的容器,每个容器都失败。
这是一个更简洁的脚本,可以添加到~/.bashrc
或~/.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
过滤。
答案 6 :(得分:91)
更新 2017 (最新)
docker container prune
这 - 2017 (旧)方式
删除所有已停止的容器
docker rm $(docker ps -a -q)
删除所有容器 (已停止且未停止)
docker rm -f $(docker ps -a -q)
答案 7 :(得分:49)
删除所有已停止的容器:
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。
答案 8 :(得分:33)
如果您不想删除所有容器,则可以选择在具有docker ps --before <container-ID>
或docker ps --since <container-ID>
的特定容器之前或之后创建的所有容器。此功能至少在Docker版本0.6.5中。
假设您已经开发了系统,现在它正在运行,但仍有许多容器。您想要删除在该工作版本之前创建的容器。使用docker ps
确定工作容器的ID。
删除在其他容器之前创建的容器
docker rm $(docker ps --before 9c49c11c8d21 -q)
另一个例子。您的数据库已经在Docker容器上运行。您已经开发了应用程序以在另一个容器上运行,现在您有许多不需要的容器。
删除在某个容器后创建的容器
docker rm $(docker ps --since a6ca4661ec7f -q)
Docker将容器存储在Ubuntu中的/var/lib/docker/containers
中。我认为额外的容器不会造成其他伤害,但会占用磁盘空间。
答案 9 :(得分:32)
更新:从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
答案 10 :(得分:22)
这是我的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
答案 11 :(得分:13)
首先,在尝试删除容器之前停止运行容器
docker rm $(docker stop -t=1 $(docker ps -q))
您可以使用kill
代替stop
。在我的情况下,我更喜欢stop
,因为我倾向于重新运行它们,而不是每次都创建一个新的,所以我试着很好地关闭它们。
注意:尝试停止容器会出错:
错误:无法移除正在运行的容器,请先停止
docker rm $(docker ps -a -q)
答案 12 :(得分:11)
从Windows shell中删除所有容器:
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
答案 13 :(得分:9)
https://github.com/HardySimpson/docker-cleanup
一个很小的一体化shell,删除:
打算作为crontab作业运行
<none>:<none>
张图片2>/dev/null
答案 14 :(得分:8)
使用:
docker rm -f $(docker ps -a -q)
强制停止并移除本地存在的所有容器。
答案 15 :(得分:7)
因此,我个人建议将此作为图像和容器的部署脚本的一部分,仅保留最近的n个容器和图像。我使用与git tag
相同的版本控制模式标记我的Docker镜像,并始终使用“最新”标记最新的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回滚并摆脱其他一切。 Unix的tail
是你最好的朋友。由于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)
同样,同样的想法适用于容器,但是到目前为止你得到了它,所以我将停止给出例子。
答案 16 :(得分:7)
删除所有已停止的容器。
sudo docker rm $(sudo docker ps -a -q)
这将通过使用docker ps -a -q获取所有容器的列表并将其id传递给docker rm来删除所有已停止的容器。这不应该删除任何正在运行的容器,它会告诉你它无法删除正在运行的图像。
删除所有未标记的图片
现在你要清理旧图像以节省一些空间。
sudo docker rmi $(sudo docker images -q --filter&#34; dangling = true&#34;)
答案 17 :(得分:6)
新方式: 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 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
答案 18 :(得分:6)
删除所有泊坞窗进程:
docker rm $(docker ps -a -q)
删除特定容器:
$ docker ps -a (lists all old containers)
$ docker rm container-Id
答案 19 :(得分:5)
删除5个最旧的容器:
docker rm `docker ps -aq | tail -n 5`
查看剩余的容器数量:
docker ps -aq | wc -l
答案 20 :(得分:4)
您可以使用以下命令删除已退出的容器:
docker rm $(sudo docker ps -a | grep Exit | cut -d ' ' -f 1)
以下是删除docker上旧图像的完整要点:Gist to remove old Docker containers and images。
答案 21 :(得分:3)
尝试此命令清理容器和悬空图像。
docker system prune -f
答案 22 :(得分:3)
您只能删除已停止的容器。在开始时停止所有这些
docker stop $(docker ps -a -q)
然后你可以删除
docker rm $(docker ps -a -q)
答案 23 :(得分:3)
我总是使用docker rmi $(docker ps -a -q)
删除所有图片。
您可以在/var/lib/docker/graph
失败时删除目录docker rmi
。
答案 24 :(得分:3)
列出所有容器
docker ps -aq
停止所有正在运行的容器
docker stop $(docker ps -aq)
删除所有容器
docker rm $(docker ps -aq)
删除所有图片
docker rmi $(docker images -q)
注意:首先,您必须在删除所有正在运行的容器之前停止它们。在删除图像之前,您必须停止并删除其相关容器。
答案 25 :(得分:3)
#!/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
答案 26 :(得分:2)
docker rm $(docker ps -a | awk '/myimage:mytag/{print $1}')
答案 27 :(得分:2)
如果您想自动/定期清理已退出的容器并删除正在运行的容器未使用的图像和卷,则可以下载图像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 Cleanup
答案 28 :(得分:2)
这是一个删除创建时间超过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
答案 29 :(得分:2)
docker rm --force `docker ps -qa`
答案 30 :(得分:2)
在Ubuntu 14.04(Trusty Tahr)上:
$ for CON in `docker ps -qa`; do docker rm $CON ; done
这只是一个普通的Bash命令,所以它应该适用于每个符合Bash标准的终端。
答案 31 :(得分:2)
在不哭的情况下移除所有容器:
sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty sudo docker rm -f
答案 32 :(得分:2)
对于任何有兴趣的人,我从qkrijger那里拿了一个例子并把它变成一个清晰的全部(停止并删除全部)
docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq`
答案 33 :(得分:2)
要删除所有已停止的泊坞窗容器,请运行:-
$ 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>
答案 34 :(得分:2)
使用以下嵌套命令:
$ sudo docker stop $(sudo docker ps -a -q)
此命令将停止所有正在运行的容器。
$ sudo docker rm $(sudo docker ps -a -q)
此命令删除所有容器。
答案 35 :(得分:1)
删除旧的Docker容器非常容易。
列出所有容器:
docker ps -a
docker ps (To list the running containers)
点击docker ps -a
后,它会显示容器列表以及容器ID(这是唯一的a-z,A-Z和0-9的组合)。复制您要删除的容器ID,然后点击下面的内容。
docker rm container_id
您的容器将与/var/lib/docker/aufs
中创建的图层一起移除(如果您使用的是Ubuntu)。
答案 36 :(得分:1)
这是一个删除所有已退出容器的单行程序。
showProgress();
如果你想删除所有图像,你可以使用这样的东西。
docker rm $(docker ps -a | grep Exited | grep -v CON | awk '{print $1}')
答案 37 :(得分:1)
要删除指定容器
docker container rm container_id
如果容器正在运行,则必须先停止它,然后再将其删除
docker container stop container_id
此命令是删除所有现有容器
docker container rm $(docker container -a -q)
答案 38 :(得分:1)
此过程包含两个步骤(停止和删除):
停止正在运行的微服务使用的容器
show processlist;
删除所有容器
docker stop $(docker ps -a -q)
删除单个容器
docker rm $(docker ps -a -q)
答案 39 :(得分:1)
使用docker管理工具Portainer
使用此工具,我们可以不使用卷和图像来管理所有旧容器
它是用于docker的简单管理UI
如何部署管理员
使用以下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环境中使用。
答案 40 :(得分:1)
我发现下面的命令非常方便停止并删除所有容器。如果使用-f
(强制)标志,则不需要使用其他命令显式停止,因为它会停止所有正在运行的容器:
docker rm -f $(docker ps -a -q)
答案 41 :(得分:1)
#!/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
答案 42 :(得分:1)
如果要删除所有容器,请使用
docker容器修剪
此命令将删除所有容器
为什么不使用清理整个docker系统
docker系统修剪
答案 43 :(得分:1)
对于Windows,您可以运行此命令以停止并删除所有容器:
@echo off
FOR /f "tokens=*" %%i IN ('docker ps -q') DO docker stop %%i
FOR /f "tokens=*" %%i IN ('docker ps -aq') DO docker rm %%i
FOR /f "tokens=*" %%i IN ('docker images --format "{{.ID}}"') DO docker rmi %%i
您可以将其另存为.bat文件,并可以执行以下操作:
答案 44 :(得分:0)
我正在使用以下命令删除已退出和重新启动 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}')
使用以下命令删除名为无
的图像docker image rm --force $(docker image ls |grep none |awk '{print $3}')
答案 45 :(得分:0)
列出所有容器(仅ID)
docker ps -aq
停止所有正在运行的容器
docker stop $(docker ps -aq)
删除所有容器
docker rm $(docker ps -aq)
删除所有图像
docker rmi $(docker images -q)
答案 46 :(得分:0)
要摆脱已停止的容器,您可以使用:
sudo python3.6 manage.py runserver
您还可以使用容器的名称:
docker rm <cointainer_id>
如果要摆脱所有已停止的容器,可以使用:
docker rm <name>
或者您也可以使用:
docker container prune
您可以使用docker rm $(docker ps -aq -f status=exited)
参数删除任何不再引用的docker管理卷
-v
您还可以将docker rm -v $(docker ps -aq -f status=exited)
与--rm
一起使用。当容器存在时,这将删除该容器和关联的文件。
答案 47 :(得分:0)
您可以使用多种方式删除容器,我将在其余答案中对其进行解释。
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的操作系统中,您可以像上面的示例一样加入这些选项。
答案 48 :(得分:0)
在Windows(PowerShell)上,您可以执行以下操作:
答案 49 :(得分:0)
对于Linux安装,请确保使用sudo。此外,寻找数月和数周的图像也很不错:
sudo docker ps -a | grep 'weeks ago\|months ago' | \
awk '{print $1}' | xargs --no-run-if-empty sudo docker rm
答案 50 :(得分:0)
我想添加这个简单的答案,因为我没有看到它,而且问题特别是“旧”而不是“全部”。
sudo docker container prune --filter "until=24h"
调整 24 小时以适应您想要移除旧容器的任何时间跨度。
答案 51 :(得分:0)
docker rm -f $(docker ps -a -q)
会做到这一点。它将停止容器并将其移除。
答案 52 :(得分:0)
我正在使用:
docker rm -v $(docker ps -a -q -f status=exited)
删除已退出的容器,并且:
docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")
为了摆脱所有未标记的图像。
答案 53 :(得分:0)
我使用以下内容的变体:
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)
答案 54 :(得分:0)
根据我的经验,你应该在移除容器之前先停止它们以避免容器,例如&#34;这个容器仍在运行&#34;那种错误,所以:
sudo /usr/bin/docker ps -aq | awk '{print $1}' | \
xargs --no-run-if-empty bash -c 'sudo docker stop $@; sudo docker rm $@' bash
我在我的dotfiles中保留了一个别名,如:
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"
答案 55 :(得分:0)
这个简短的脚本可能有所帮助(根据以前的答案编译)!
#!/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
答案 56 :(得分:0)
这两行Bash会在删除之前按某些关键字过滤容器:
<?php
include_once "app/Mage.php";
Mage::init();
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
$yourstring = array( 'ä', 'ö' , 'Ã' , 'ü' , '°' , '<short_description>' , '</short_description> <full_description>' , '</full_description>' , '</weight>');
$newstring = array( 'ä' , 'ö' , 'ø' , 'ü' , '°' , 'SHORT_DESCRIPTION' , 'SHORT_DESCRIPTION' , 'DELETE' , 'DELETE');
$_productCollection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->load();
echo 'RUNNING SCRIPT...<br /><br /><br /><br />';
for ($i = 0; $i <= 8; $i++) {
echo 'Letter to fix: '.$newstring[$i].'<br />';
foreach($_productCollection as $_product) {
if (strpos($_product->getDescription(),$yourstring[$i]) !== false) {
$newdescription = str_replace($yourstring[$i],$newstring[$i],$_product->getDescription());
$_product->setDescription($newdescription);
$_product->save();
echo 'Updated product: '.$_product->getName().'<br />';
}
}
echo '<br /><br />';
}
?>
来自this post。
答案 57 :(得分:0)
要简单地删除正在运行的容器当前未使用的所有内容,我通常放入Mac上.bash_profile
的以下别名将有所帮助:
alias dockerclean="docker ps -q -a | xargs docker rm -v && docker images -q | xargs docker rmi"
每当从命令行调用dockerclean
时,它将删除已停止的容器以及未使用的图像层。对于运行容器和使用过的图像,它将打印一条警告消息并跳过它。
答案 58 :(得分:0)
您可以使用存储库https://github.com/kartoza/docker-helpers中的docker-helper。安装完成后,只需输入drmc
。
答案 59 :(得分:-2)
您可以使用某些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
答案 60 :(得分:-3)
我建议您先停止图片然后删除。
你可以这样:
$ docker stop $(docker ps -a)
$ docker rm $(docker ps -a)
答案 61 :(得分:-4)
您可以停止泊坞窗容器,一旦停止,您就可以移除容器。
停止容器:
$ docker stop“containerID” - 您还可以提及容器ID的前两个字母,它可以正常工作。
删除容器
$ docker rm“containerID” - 您还可以提及容器的前两个字母
如果这些命令不允许您停止/删除容器,请确保您有sudo访问泊坞主机的权限。