使用脚本让docker容器在停止后自动重启

使用脚本让docker容器在停止后自动重启

安装依赖

确保你已经安装了 docker-py 库(Docker SDK for Python):

pip install docker

创建Python脚本

创建一个新的Python脚本文件 docker_restart.py

nano docker_restart.py

并粘贴以下代码

import docker
import time
import logging
from logging.handlers import RotatingFileHandler

# 配置日志记录
log_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
log_handler = RotatingFileHandler(
    '/path/to/restart_specific_container.log',  # 日志文件路径。需要更改!!
    maxBytes=5*1024*1024,  # 日志文件最大大小,5 MB
    backupCount=2,  # 最多保留2个日志文件
    encoding='utf-8'  # 设置日志文件编码为 utf-8 以支持中文
)
log_handler.setFormatter(log_formatter)

logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(log_handler)

def restart_specific_container(container_name):
    client = docker.from_env()
    
    while True:
        try:
            container = client.containers.get(container_name)
            if container.status in ['exited', 'dead']:
                logger.info(f"重启容器 {container.name} (ID: {container.id})")
                container.restart()
            else:
                logger.info(f"容器 {container.name} 正在运行 (ID: {container.id})")
        except docker.errors.NotFound:
            logger.error(f"未找到容器 {container_name}")
        
        # 等待一段时间再进行下一次检测
        time.sleep(60)

if __name__ == "__main__":
    container_name = "my_container"  # 替换为你的容器名称
    restart_specific_container(container_name)

如何运行脚本

python3 docker_restart.py

使用 systemd 服务(持久化运行)

1.创建一个 systemd 服务文件

nano /etc/systemd/system/docker_restart.service

并将以下内容粘贴到文件中

[Unit]
Description=Restart Specific Docker Container with Logging Rotation
After=docker.service
Requires=docker.service

[Service]
ExecStart=/usr/bin/python3 /path/to/docker_restart.py #注意只有后面的需要更改
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=docker-restart

[Install]
WantedBy=multi-user.target

2.重新加载 systemd 配置

sudo systemctl daemon-reload

启用和启动服务

sudo systemctl enable docker_restart.service
sudo systemctl start docker_restart.service

3.检查服务状态以确认是否已成功启动

sudo systemctl status docker_restart.service
LICENSED UNDER CC BY-NC-SA 4.0