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

Ric*_*ard 15 bash docker

这个问题解释了如何从图像中停止Docker容器的启动.

但是如果没有正在运行的容器我得到错误docker stop需要至少一个参数.这意味着我不能在长的.sh脚本中运行此命令而不会破坏它.

即使没有找到结果,如何更改这些命令?

docker stop $(docker ps -q --filter ancestor="imagname")
docker rm `docker ps -aq` &&
Run Code Online (Sandbox Code Playgroud)

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

Far*_*ahi 20

如果我们可以帮助他人:

要使用特定图像停止容器:

docker ps -q --filter ancestor="imagename" | xargs -r docker stop
Run Code Online (Sandbox Code Playgroud)

要删除已退出的容器:

docker rm -v $(docker ps -a -q -f status=exited)
Run Code Online (Sandbox Code Playgroud)

要删除未使用的图像:

docker rmi $(docker images -f "dangling=true" -q)
Run Code Online (Sandbox Code Playgroud)

如果您使用的是Docker> 1.9:

docker volume rm $(docker volume ls -qf dangling=true)
Run Code Online (Sandbox Code Playgroud)

如果您使用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
Run Code Online (Sandbox Code Playgroud)

Docker 1.13更新:

要删除未使用的图像:

docker image prune
Run Code Online (Sandbox Code Playgroud)

要删除未使用的容器:

docker container prune
Run Code Online (Sandbox Code Playgroud)

要删除未使用的卷:

docker volume prune
Run Code Online (Sandbox Code Playgroud)

要删除未使用的网络:

docker network prune
Run Code Online (Sandbox Code Playgroud)

要删除所有未使用的组件:

docker system prune
Run Code Online (Sandbox Code Playgroud)

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

  • docker v 1.13 +1的最新更新 (2认同)