#!/usr/bin/env bash # 部署脚本:在部署机上停止旧容器并启动新版镜像 # 由 CI/CD 通过 ssh 调用,CI/CD 通过 IMAGE_TAG 环境变量传入本次镜像 tag # 依赖:本机已安装 docker;工作目录 /app/registry 用于持久化 data/ set -euo pipefail IMAGE_NAME="registry-app" IMAGE_TAG="${IMAGE_TAG:-latest}" CONTAINER_NAME="registry" HOST_PORT="${HOST_PORT:-8008}" APP_DIR="$(cd "$(dirname "$0")" && pwd)" DATA_DIR="${APP_DIR}/data" echo "[start.sh] 使用镜像:${IMAGE_NAME}:${IMAGE_TAG}" mkdir -p "${DATA_DIR}/configs" # 停止并清理旧容器(若不存在则忽略) if docker ps -a --format '{{.Names}}' | grep -qx "${CONTAINER_NAME}"; then echo "[start.sh] 停止并删除旧容器 ${CONTAINER_NAME}" docker rm -f "${CONTAINER_NAME}" >/dev/null fi # 启动新容器:数据目录挂载到宿主机以持久化 echo "[start.sh] 启动新容器" docker run -d \ --name "${CONTAINER_NAME}" \ --restart unless-stopped \ -p "${HOST_PORT}:3000" \ -v "${DATA_DIR}:/app/data" \ "${IMAGE_NAME}:${IMAGE_TAG}" echo "[start.sh] 部署完成:http://localhost:${HOST_PORT}"