#!/bin/sh # 定义应用组名和名称 group_name='venue_reservation_service' app_name=${DRONE_REPO_NAME} app_version='latest' # 验证必要变量 if [ -z "$app_name" ]; then echo "ERROR: DRONE_REPO_NAME not set!" exit 1 fi # 1. 安全停止容器 if docker ps | grep -q ${app_name}; then echo "----Stopping container: ${app_name}----" docker stop ${app_name} || echo "警告: 容器停止失败,但继续执行" elif docker ps -a | grep -q ${app_name}; then echo "容器 ${app_name} 已停止,跳过停止命令" else echo "容器 ${app_name} 不存在,无需停止" fi # 2. 安全删除容器 if docker ps -a | grep -q ${app_name}; then echo "----Removing container: ${app_name}----" docker rm ${app_name} || echo "警告: 容器删除失败,但继续执行" else echo "容器 ${app_name} 不存在,无需删除" fi # 3. 安全删除镜像 image_name="${group_name}/${app_name}:${app_version}" if docker images | grep -q "${group_name}/${app_name}.*${app_version}"; then echo "----Removing image: ${image_name}----" docker rmi ${image_name} || echo "警告: 镜像删除失败,但继续执行" else echo "镜像 ${image_name} 不存在,无需删除" fi # 4. 构建新镜像 echo "----Building image: ${image_name}----" docker build -t ${image_name} . # 5. 带双端口映射运行容器 echo "----Starting container with port mapping (9020 & 9030)----" docker run \ --name ${app_name} \ -p 9020:9020 \ -p 9030:9030 \ -e TZ="Asia/Shanghai" \ -v /etc/localtime:/etc/localtime \ -d ${image_name} echo "----部署完成! 容器 ${app_name} 已启动----" echo "已映射端口: 9020 (应用端口) 和 9030 (管理端口)"