Shell脚本自动化管理Docker容器需先检查Docker CLI和daemon状态,再按停→删→拉镜像→启容器流程操作,并校验状态、处理错误、安全清理。
用 shell 脚本自动化管理 docker 容器生命周期,核心是把 docker run、docker start/stop、docker rm、docker ps 等命令按需组合,并加入状态判断和错误处理,避免“裸调命令”导致脚本崩溃或容器异常。
检查依赖与环境准备
脚本开头必须确认 Docker CLI 可用、当前用户有权限执行 Docker 命令(通常需在 docker 组内),并可选校验镜像是否存在:
- 用
command -v docker &>/dev/null || { echo "Docker 未安装"; exit 1; }检查 CLI - 用
docker info &>/dev/null || { echo "Docker daemon 未运行或权限不足"; exit 1; }验证连接 - 若需确保镜像就绪,可用
docker inspect image:tag &>/dev/null || docker pull image:tag
启动容器(带存在性判断与自动清理)
避免重复启动同名容器,也防止旧容器残留。推荐先停再删再启(适用于开发/测试场景):
- 用
docker ps -q -f name=^myapp$判断容器是否运行中 - 若存在,先
docker stop myapp &>/dev/null,再docker rm myapp &>/dev/null - 然后执行完整
docker run -d --name myapp -p 8080:80 nginx:alpine - 最后用
docker ps -f name=^myapp$ --format "{{.Status}}" | grep -q "Up" || { echo "启动失败"; exit 1; }校验状态
重启/更新容器(支持镜像升级)
当需要更新镜像并重启时,不能只 docker restart——它不会拉新镜像或重建配置:
- 先获取当前容器的运行参数(可用
docker inspect myapp提取 HostConfig 和 Config),但更稳妥是把关键参数(端口、卷、环境变量)写成变量集中管理 - 脚本中定义:
IMG="nginx:1.25-alpine"、PORTS="-p 8080:80"、VOLS="-v /data:/usr/share/nginx/html" - 执行顺序:停 → 删 →
docker pull $IMG→docker run -d --name myapp $PORTS $VOLS $IMG - 加
--rm或使用docker-compose更适合长期运维;Shell 脚本适合轻量、单容器场景
安全停止与清理(含退出码检查)
停止容器不是简单 docker stop 就完事,要等进程真正退出,再确认是否需要删除:
- 用
docker stop -t 30 myapp设置超时,避免僵死容器 - 用
docker wait myapp获取实际退出码(非 0 表示异常终止) - 若需自动清理,加
docker rm myapp;若保留日志,跳过此步,改用docker logs myapp > /var/log/myapp.log - 可封装为函数:
stop_and_rm() { docker stop "$1" && docker rm "$1"; },调用时传容器名
不复杂但容易忽略的是错误传播和日志反馈——每条关键命令后加 || exit $? 或记录时间戳日志,能让排障快得多。


















