#!/bin/bash # 部署脚本 - 在服务器上运行 # 用法: ./deploy.sh [端口号,默认 49999] set -e IMAGE_NAME="duidui-admin-web" CONTAINER_NAME="duidui-admin-web-container" TAR_FILE="duidui-admin-web.tar" NETWORK_NAME="dd.net" PORT=${1:-49999} echo "==========================================" echo "开始部署 $IMAGE_NAME" echo "==========================================" # 检查 tar 文件是否存在 if [ ! -f "$TAR_FILE" ]; then echo "错误: 找不到 $TAR_FILE 文件" exit 1 fi # 停止并删除旧容器(如果存在) echo "检查并清理旧容器..." if [ "$(docker ps -a -q -f name=$CONTAINER_NAME)" ]; then echo "停止旧容器..." docker stop $CONTAINER_NAME || true echo "删除旧容器..." docker rm $CONTAINER_NAME || true fi # 删除旧镜像(如果存在) echo "检查并清理旧镜像..." if [ "$(docker images -q $IMAGE_NAME)" ]; then echo "删除旧镜像..." docker rmi $IMAGE_NAME || true fi # 加载镜像 echo "加载 Docker 镜像..." docker load -i $TAR_FILE # 处理镜像标签(兼容 podman 构建时的 localhost/ 前缀) if ! docker image inspect $IMAGE_NAME:latest >/dev/null 2>&1; then if docker image inspect localhost/$IMAGE_NAME:latest >/dev/null 2>&1; then echo "检测到镜像标签为 localhost/$IMAGE_NAME:latest,重新标记为 $IMAGE_NAME:latest" docker tag localhost/$IMAGE_NAME:latest $IMAGE_NAME:latest fi fi # 检查并创建网络(如果不存在) echo "检查 Docker 网络..." if ! docker network ls | grep -q "$NETWORK_NAME"; then echo "创建 Docker 网络: $NETWORK_NAME" docker network create $NETWORK_NAME else echo "网络 $NETWORK_NAME 已存在" fi # 运行容器 echo "启动容器..." docker run -d \ --name $CONTAINER_NAME \ --network $NETWORK_NAME \ --restart unless-stopped \ -p $PORT:80 \ $IMAGE_NAME # 检查容器状态 echo "等待容器启动..." sleep 2 if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then echo "==========================================" echo "部署成功!" echo "==========================================" echo "容器名称: $CONTAINER_NAME" echo "Docker 网络: $NETWORK_NAME" echo "访问地址: http://localhost:$PORT" echo "" echo "查看容器状态: docker ps -a | grep $CONTAINER_NAME" echo "查看容器日志: docker logs $CONTAINER_NAME" echo "查看网络信息: docker network inspect $NETWORK_NAME" echo "停止容器: docker stop $CONTAINER_NAME" echo "启动容器: docker start $CONTAINER_NAME" echo "删除容器: docker rm -f $CONTAINER_NAME" else echo "==========================================" echo "部署失败!请检查日志" echo "==========================================" docker logs $CONTAINER_NAME exit 1 fi