diff --git a/.github/workflows/docker-build-deploy.yml b/.github/workflows/docker-build-deploy.yml index e725165..b48e601 100644 --- a/.github/workflows/docker-build-deploy.yml +++ b/.github/workflows/docker-build-deploy.yml @@ -123,19 +123,26 @@ jobs: ssh -p $SSH_PORT $SSH_USER@$SSH_HOST \ "mkdir -p $COMPOSE_DIR/api" - # 第一步:先停止并删除旧容器(使用服务器上现有的 docker-compose.yml) + # 第一步:强制停止并删除所有旧容器 echo "停止并删除旧容器..." ssh -p $SSH_PORT $SSH_USER@$SSH_HOST " - cd $COMPOSE_DIR/api 2>/dev/null || exit 0 - if [ -f '$COMPOSE_FILE' ]; then - echo '使用旧配置停止容器...' - docker-compose -f '$COMPOSE_FILE' down --remove-orphans || true - fi + # 先尝试使用 docker-compose down + cd $COMPOSE_DIR/api 2>/dev/null && docker-compose -f '$COMPOSE_FILE' down --remove-orphans 2>/dev/null || true - # 清理可能残留的容器 - echo '清理残留容器...' - docker stop life-echo-api-prod life-echo-celery-worker life-echo-postgres life-echo-redis 2>/dev/null || true - docker rm -f life-echo-api-prod life-echo-celery-worker life-echo-postgres life-echo-redis 2>/dev/null || true + # 强制停止并删除所有 life-echo 相关容器(按名称匹配) + echo '强制清理所有 life-echo 容器...' + docker ps -a --filter 'name=life-echo' --format '{{.ID}}' | xargs -r docker rm -f 2>/dev/null || true + + # 再次确保指定容器被删除 + echo '确保指定容器被删除...' + docker rm -f life-echo-api-prod life-echo-celery-worker life-echo-postgres life-echo-redis life-echo-celery-beat life-echo-flower 2>/dev/null || true + + # 等待容器完全停止 + sleep 3 + + # 验证容器已删除 + echo '验证容器状态...' + docker ps -a --filter 'name=life-echo' || true " # 第二步:复制新的配置文件到远程服务器