本文目录导读:

是的,脚本可以自动停止Docker容器,以下是几种常见的实现方式:
基础停止脚本
停止指定容器
#!/bin/bash # stop_container.sh docker stop <容器名称或ID>
停止所有运行中的容器
#!/bin/bash # stop_all_containers.sh docker stop $(docker ps -q)
更实用的脚本示例
带状态检查的停止脚本
#!/bin/bash
CONTAINER_NAME="my-app"
# 检查容器是否存在并运行
if docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
echo "正在停止容器: ${CONTAINER_NAME}"
docker stop ${CONTAINER_NAME}
echo "容器已停止"
else
echo "容器 ${CONTAINER_NAME} 未运行或不存在"
fi
批量停止带特定标签的容器
#!/bin/bash
# 停止所有带指定标签的容器
LABEL="env=production"
echo "正在查找带标签 ${LABEL} 的运行容器..."
CONTAINERS=$(docker ps --filter "label=${LABEL}" -q)
if [ -n "$CONTAINERS" ]; then
echo "找到以下容器,正在停止..."
docker stop $CONTAINERS
echo "所有匹配的容器已停止"
else
echo "没有找到匹配的运行容器"
fi
自动化场景示例
定时停止脚本(配合cron)
#!/bin/bash # 在每天凌晨2点停止特定容器 LOG_FILE="/var/log/docker_auto_stop.log" echo "$(date) - 开始自动停止任务" >> $LOG_FILE # 停止开发环境容器 docker stop dev-app dev-db 2>> $LOG_FILE echo "$(date) - 任务完成" >> $LOG_FILE
设置cron定时任务:
# 每天凌晨2点执行 0 2 * * * /path/to/auto_stop.sh
基于资源使用的自动停止
#!/bin/bash
CPU_THRESHOLD=90
MEMORY_THRESHOLD=90
docker stats --no-stream --format "{{.Name}} {{.CPUPerc}} {{.MemPerc}}" | \
while read -r line; do
NAME=$(echo $line | awk '{print $1}')
CPU=$(echo $line | awk '{print $2}' | sed 's/%//')
MEM=$(echo $line | awk '{print $3}' | sed 's/%//')
if (( $(echo "$CPU > $CPU_THRESHOLD" | bc -l) )) || \
(( $(echo "$MEM > $MEMORY_THRESHOLD" | bc -l) )); then
echo "容器 ${NAME} 资源使用过高 (CPU: ${CPU}%, MEM: ${MEM}%)"
docker stop $NAME
fi
done
使用Docker Compose
#!/bin/bash # 停止docker-compose管理的所有服务 cd /path/to/docker-compose-project docker-compose down # 或者只停止不删除 # docker-compose stop
高级示例:带通知的停止脚本
#!/bin/bash
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/xxx"
DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/xxx"
stop_and_notify() {
local container=$1
if docker stop $container 2>/dev/null; then
MESSAGE="✅ 容器 ${container} 已成功停止于 $(date)"
# 发送通知(可选)
# curl -X POST -H 'Content-type: application/json' \
# --data "{\"text\":\"${MESSAGE}\"}" \
# $SLACK_WEBHOOK_URL
echo $MESSAGE
else
echo "❌ 容器 ${container} 停止失败"
fi
}
# 使用示例
stop_and_notify "my-app"
使用建议
- 添加错误处理:使用
set -e或检查命令返回值 - 日志记录:记录操作时间戳和结果
- 权限管理:确保脚本有执行权限
chmod +x script.sh - 测试环境:先在测试环境验证脚本
- 使用绝对路径:在脚本中使用
docker的绝对路径/usr/bin/docker
这样你就可以根据实际需求创建自动停止Docker容器的脚本了。