记录一次 nas docker 运行出错 使用Python脚本检查错误并重启对应容器 npc 运行出错 导致无法连接

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
文件存储 NAS,50GB 3个月
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 记录一次 nas docker 运行出错 使用Python脚本检查错误并重启对应容器 npc 运行出错 导致无法连接
import os
import time
import datetime
import subprocess
import mysql.connector
# Docker容器名称
container_name = "containerName"
# MySQL数据库连接配置
db_host = "localhost"
db_user = "*********"
db_password = "*********"
db_database = "***********"
# 连接到MySQL数据库
db_connection = mysql.connector.connect(
    host=db_host,
    user=db_user,
    password=db_password,
    database=db_database
)
db_cursor = db_connection.cursor()
# 创建错误日志表格
db_cursor.execute("CREATE TABLE IF NOT EXISTS error_logs (id INT AUTO_INCREMENT PRIMARY KEY, container_name VARCHAR(255), error_time DATETIME)")
db_connection.commit()
# 日志文件路径
#log_file = "/var/log/docker.log"
# 定时检查间隔(秒)
check_interval = 60
# 定义错误关键词
error_keywords = ["\x1b[1;31m[E]\x1b[0m"]
# 定义容器重启次数
restart_count = 0
while True:
    # 获取当前时间
    current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    # 获取容器日志
    logs_command = f"docker logs --tail 100 {container_name}"
    logs_process = subprocess.Popen(logs_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    logs_output, _ = logs_process.communicate()
    logs = logs_output.decode("utf-8")
    # 检查日志中是否包含错误关键词
    if 1:#any(keyword in logs.lower() for keyword in error_keywords):
        # 提取时间字符串
        #log_lines = logs.split("\n")
        for line in logs.splitlines():
            if error_keywords[0] in line:
                # 获取时间字符串
                time_string = line[:19]
                # 解析时间字符串为datetime对象
                error_time = datetime.datetime.strptime(time_string, "%Y/%m/%d %H:%M:%S")
                # 查询是否存在记录
                db_cursor.execute("SELECT COUNT(*) FROM error_logs WHERE error_time = %s", (error_time,))
                result = db_cursor.fetchone()
                count = result[0]
                # 判断是否存在记录
                if count > 0:
                    break
                    print("存在记录,不重启docker")
                else:
                    print("不存在记录,执行重启docker操作")
                    # 记录错误时间到数据库
                    db_cursor.execute("INSERT INTO error_logs (container_name, error_time) VALUES (%s, %s)",
                                      (container_name, error_time))
                    db_connection.commit()
                    # 重启容器
                    restart_command = f"docker restart {container_name}"
                    subprocess.run(restart_command, shell=True)
                    restart_count += 1
                    print(f"Detected error in logs. Restarted container. Restart count: {restart_count}")
                    # 休眠一段时间,等待容器重启完成
                    break
    break
    # 休眠一段时间后继续检查
    #time.sleep(check_interval)
相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
目录
相关文章
|
3天前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
2天前
|
NoSQL Redis Docker
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
12 0
|
3天前
|
存储 安全 数据库
【Docker 专栏】Docker 容器内应用的状态持久化
【5月更文挑战第9天】本文探讨了Docker容器中应用状态持久化的重要性,包括数据保护、应用可用性和历史记录保存。主要持久化方法有数据卷、绑定挂载和外部存储服务。数据卷是推荐手段,可通过`docker volume create`命令创建并挂载。绑定挂载需注意权限和路径一致性。利用外部存储如数据库和云服务可应对复杂需求。最佳实践包括规划存储策略、定期备份和测试验证。随着技术发展,未来将有更智能的持久化解决方案。
【Docker 专栏】Docker 容器内应用的状态持久化
|
3天前
|
机器学习/深度学习 监控 Kubernetes
【Docker 专栏】Docker 容器内服务的自动扩展与缩容
【5月更文挑战第9天】本文探讨了Docker容器服务的自动扩展与缩容原理及实践,强调其在动态业务环境中的重要性。通过选择监控指标(如CPU使用率)、设定触发条件和制定扩展策略,实现资源的动态调整。方法包括云平台集成和使用Kubernetes等框架。实践中,电商平台和实时数据处理系统受益于此技术。注意点涉及监控数据准确性、扩展速度和资源分配。未来,智能算法将提升扩展缩容的效率和准确性,成为关键技术支持。
【Docker 专栏】Docker 容器内服务的自动扩展与缩容
|
3天前
|
Java 数据库连接 Docker
【Docker 专栏】Docker 容器内环境变量的管理与使用
【5月更文挑战第9天】本文介绍了Docker容器中环境变量的管理与使用,环境变量用于传递配置信息和设置应用运行环境。设置方法包括在Dockerfile中使用`ENV`指令或在启动容器时通过`-e`参数设定。应用可直接访问环境变量或在脚本中使用。环境变量作用包括传递配置、设置运行环境和动态调整应用行为。使用时注意变量名称和值的合法性、保密性和覆盖问题。理解并熟练运用环境变量能提升Docker技术的使用效率和软件部署质量。
【Docker 专栏】Docker 容器内环境变量的管理与使用
|
3天前
|
数据安全/隐私保护 开发者 Python
【Python 基础】检查字符串是否只包含数字和字母?
【5月更文挑战第8天】【Python 基础】检查字符串是否只包含数字和字母?
|
3天前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
|
3天前
|
存储 弹性计算 运维
Docker数据集与自定义镜像:构建高效容器的关键要素
Docker数据集与自定义镜像:构建高效容器的关键要素
|
4天前
|
Kubernetes Java 调度
Java容器技术:Docker与Kubernetes
Java容器技术:Docker与Kubernetes
14 0
|
4天前
|
算法 计算机视觉 Docker
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境