bash - 按镜像名称停止 docker 容器,如果没有容器正在运行,则不会出错

标签 bash docker

这个 question解释如何停止从镜像启动的 Docker 容器。

但如果没有正在运行的容器,我会收到错误 docker stop requires a minimum of one argument。这意味着我不能在一个长的 .sh 脚本中运行这个命令而不破坏它。

即使没有找到结果,如何更改这些命令以使其正常工作?

docker stop $(docker ps -q --filter ancestor="imagname")
docker rm `docker ps -aq` &&

(如果可能,我正在寻找一个纯粹的 Docker 答案,而不是 bash 测试,因为我正在通过 ssh 运行我的脚本,所以我认为我无法访问正常的脚本测试)

最佳答案

以防万一我们可以帮助他人:

使用特定图像停止容器:

docker ps -q --filter ancestor="imagename" | xargs -r docker stop

移除退出的容器:

docker rm -v $(docker ps -a -q -f status=exited)

要删除未使用的图像:

docker rmi $(docker images -f "dangling=true" -q)

如果您使用的是 Docker > 1.9:

docker volume rm $(docker volume ls -qf dangling=true)

如果您使用的是 Docker <= 1.9,请改用它:

docker run -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker --rm martin/docker-cleanup-volumes

Docker 1.13 更新:

要删除未使用的图像:

docker image prune

移除未使用的容器:

docker container prune

要删除未使用的卷:

docker volume prune

要删除未使用的网络:

docker network prune

删除所有未使用的组件:

docker system prune

重要提示:在生产中执行此操作之前,请确保您了解命令并备份重要数据。

关于bash - 按镜像名称停止 docker 容器,如果没有容器正在运行,则不会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37182148/

相关文章:

bash - 当我设置-e时如何忽略不同于0的返回值?

php - 如何从 shell 脚本文件调用 PHP 文件

mysql - Docker + Mysql 连接错误 : Unknown MySQL server host 'db'

node.js - Docker - Node ,找不到 mysql 模块

docker 错误 : Error processing tar file(exit status 1): unexpected EOF

docker - 游民:使用游民将docker run参数传递给多个容器

arrays - 在 bash 中将 argv 条目附加到数组(动态填充数组)

linux - 这个表达式的计算结果是什么? (bash shell 脚本)

bash - 将命令作为输入传递给另一个命令(su、ssh、sh 等)

macos - docker 使用 xhyve 在 osx 上编写挂载主机目录