安装依赖
确保你已经安装了 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