diff --git a/build-and-run.sh b/build-and-run.sh new file mode 100644 index 0000000..24ea304 --- /dev/null +++ b/build-and-run.sh @@ -0,0 +1,54 @@ +#!/bin/bash +set -euo pipefail + +# ========== 可调参数 ========== +IMAGE_NAME="email-sender" # 镜像名 +CONTAINER_NAME="email-sender" # 容器名 +HOST_PORT=7880 # 宿主机端口;Dockerfile 内也写了 7880 +PROXY="http://127.0.0.1:7890" # 如不需要代理,留空 "" 即可 +# ============================== + +echo "📍 当前目录: $(pwd)" + +# 1. 停止并删除旧容器 +if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then + echo "🛑 停止旧容器:$CONTAINER_NAME" + docker stop "$CONTAINER_NAME" || true + echo "🧹 删除旧容器:$CONTAINER_NAME" + docker rm "$CONTAINER_NAME" +fi + +# 2. 删除旧镜像 +if docker images -a | awk '{print $1}' | grep -q "^${IMAGE_NAME}$"; then + echo "🗑️ 删除旧镜像:$IMAGE_NAME" + docker rmi -f "$IMAGE_NAME" +fi + +# 3. Git 拉取最新代码(当前目录是 git 仓库) +if [ -d ".git" ]; then + echo "🔄 拉取最新源码" + git pull +else + echo "❌ 错误:当前目录不是 git 仓库" + exit 1 +fi + +# 4. 构建镜像 +echo "🔧 开始构建镜像:$IMAGE_NAME" +if [ -n "$PROXY" ]; then + docker build \ + --build-arg http_proxy="$PROXY" \ + --build-arg https_proxy="$PROXY" \ + --network=host \ + -t "$IMAGE_NAME" . +else + docker build -t "$IMAGE_NAME" . +fi + +# 5. 运行容器(挂载 config 目录,方便改 SMTP 配置) +echo "🚀 启动容器:$CONTAINER_NAME" +docker run --rm \ + -p "${HOST_PORT}:${HOST_PORT}" \ + -v "$(pwd)/config":/app/config \ + --name "$CONTAINER_NAME" \ + "$IMAGE_NAME"