如何在Bash脚本中检查enhanced-app容器运行状态再执行清理?
解决Docker容器清理时的报错问题
你可以通过两种方式实现仅在容器运行时执行清理操作,避免无容器时的报错:
方法1:使用Docker命令的容错参数(推荐)
Docker本身提供了容错参数,无需额外判断逻辑就能简化代码,避免报错:
#!/bin/bash echo "Stopping and removing enhanced-app..." # --ignore 参数会忽略不存在/未运行的容器,不会抛出错误(Docker 20.10+支持) docker container stop --ignore enhanced-app # -f 参数强制删除容器,不管它是否运行/存在,执行后不会报错 docker container rm -f enhanced-app CURPATH=$(dirname "${BASH_SOURCE[0]}") docker build . -t enhanced-app docker run -d -p 5000:5000 --name enhanced-app enhanced-app
如果你的Docker版本较低,直接用docker container rm -f enhanced-app就能替代stop+rm两步操作,它会自动先停止运行中的容器再删除,容器不存在时也不会报错。
方法2:先判断容器状态再执行清理
如果需要严格只清理正在运行的容器,可以先通过docker ps检查状态:
#!/bin/bash # 仅获取运行中、名称匹配enhanced-app的容器ID,无匹配则输出为空 RUNNING_CONTAINER=$(docker ps -q -f name=enhanced-app) # 当变量非空时,说明有运行的容器,才执行清理 if [ -n "$RUNNING_CONTAINER" ]; then echo "Stopping and removing running enhanced-app..." docker container stop enhanced-app docker container rm enhanced-app fi CURPATH=$(dirname "${BASH_SOURCE[0]}") docker build . -t enhanced-app docker run -d -p 5000:5000 --name enhanced-app enhanced-app
内容的提问来源于stack exchange,提问作者Tini
相关产品推荐
相关产品推荐

