#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Docker Compose 部署模块 """ import os import subprocess from pathlib import Path from .log import Logger def run_docker_compose(compose_dir, service_name): """ 执行 docker-compose 命令 参数: compose_dir: docker-compose.yml 所在目录 service_name: 要构建和启动的服务名称 返回: bool: 成功返回 True,失败返回 False """ try: # 转换为绝对路径 compose_dir = Path(compose_dir).resolve() Logger.separator() Logger.info("开始 Docker 部署") Logger.separator() Logger.info(f"执行目录: {compose_dir}") Logger.info(f"服务名称: {service_name}") # 检查目录是否存在 if not compose_dir.exists(): Logger.error(f"目录不存在: {compose_dir}") return False # 检查 docker-compose.yml 是否存在 compose_file = compose_dir / "docker-compose.yml" if not compose_file.exists(): Logger.error(f"docker-compose.yml 不存在: {compose_file}") return False # 构建镜像 if not Logger.run_command(f"docker-compose build --no-cache {service_name}", compose_dir): Logger.error(f"镜像构建失败: {service_name}") return False Logger.info(f"镜像构建成功: {service_name}") # 启动服务 if not Logger.run_command(f"docker-compose up -d {service_name}", compose_dir): Logger.error(f"服务启动失败: {service_name}") return False Logger.info(f"服务启动成功: {service_name}") Logger.info(f"Docker 部署完成: {service_name}") return True except Exception as e: Logger.error(f"Docker 部署异常: {e}") return False