MeterSphere从v3.6.5升级到v3.6.7报错“client version 1.43 is too old”排查过程


报错

使用MeterSphere在线升级包metersphere-ce-online-installer-v3.6.7-lts从v3.6.5升级到v3.6.7时在拉取镜像环节报错:

unable to get image 'registry.fit2cloud.com/metersphere/kafka:3.9.1': Error response from daemon: client version 1.43 is too old. Minimum supported API version is 1.44, please upgrade your client to a newer version

排查

通过报错信息可以看出当前使用的 Docker 客户端(CLI)版本较旧,其支持的 Docker API 版本为 1.43,但目标 Docker Daemon(服务端)要求最低 API 版本为 1.44,因此拒绝通信。

执行docker version查看版本信息

root@MeterSphere:~# docker version
Client: Docker Engine - Community
 Version:           29.0.0
 API version:       1.52
 Go version:        go1.25.4
 Git commit:        3d4129b
 Built:             Mon Nov 10 21:46:24 2025
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          29.0.0
  API version:      1.52 (minimum version 1.44)
  Go version:       go1.25.4
  Git commit:       d105562
  Built:            Mon Nov 10 21:46:24 2025
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v2.1.5
  GitCommit:        fcd43222d6b07379a4be9786bda52438f0dd16a1
 runc:
  Version:          1.3.3
  GitCommit:        v1.3.3-0-gd842d771
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Docker Client 和 Server 版本均为 29.0.0,API version 为 1.52(远高于报错中要求的最低 1.44)。Docker 环境本身是完全兼容且最新的,不应该再出现 client version 1.43 is too old 的错误。那为什么还会报这个错?这说明:执行 docker pull 命令时,实际调用的并不是这个新版的 docker CLI!

查看MeterSphere的install.sh

#!/bin/bash

__current_dir=$(
   cd "$(dirname "$0")"
   pwd
)
args=$@
__os=`uname -a`

function log() {
   message="[MeterSphere Log]: $1 "
   echo -e "${message}" 2>&1 | tee -a ${__current_dir}/install.log
}
set -a
__local_ip=$(hostname -I|cut -d" " -f 1)
source ${__current_dir}/install.conf

export INSTALL_TYPE='install'
if [ -f ~/.msrc ];then
  source ~/.msrc > /dev/null
  echo "存在已安装的 MeterSphere, 安装目录为 ${MS_BASE}/metersphere, 执行升级流程"
  INSTALL_TYPE='upgrade'
elif [ -f /usr/local/bin/msctl ];then
  MS_BASE=$(cat /usr/local/bin/msctl | grep MS_BASE= | awk -F= '{print $2}' 2>/dev/null)
  echo "存在已安装的 MeterSphere, 安装目录为 ${MS_BASE}/metersphere, 执行升级流程"
  INSTALL_TYPE='upgrade'
else
  MS_BASE=$(cat ${__current_dir}/install.conf | grep MS_BASE= | awk -F= '{print $2}' 2>/dev/null)
  echo "安装目录为 ${MS_BASE}/metersphere, 开始进行安装"
  INSTALL_TYPE='install'
fi
if [ ${MS_EXTERNAL_KAFKA} = 'false' ];then
   if [[ ${__os} =~ 'Darwin' ]];then
      MS_BASE=${MS_BASE:-~}
      __local_ip=$(ipconfig getifaddr en0)
      sed -i -e "s#MS_KAFKA_HOST=.*#MS_KAFKA_HOST=${__local_ip}#g" ${__current_dir}/install.conf
   fi
   sed -i -e "s#MS_KAFKA_HOST=.*#MS_KAFKA_HOST=${__local_ip}#g" ${__current_dir}/install.conf
fi
set +a

__current_version=$(cat ${MS_BASE}/metersphere/version 2>/dev/null || echo "")
__target_version=$(cat ${__current_dir}/metersphere/version)
# 截取实际版本
current_version=${__current_version%-*}
current_version=${current_version:1}
current_version_arr=(`echo $current_version | tr '.' ' '`)

target_version=${__target_version%-*}
target_version=${target_version:1}
target_version_arr=(`echo $target_version | tr '.' ' '`)

current_version=$(printf '1%02d%02d%02d' ${current_version_arr[0]} ${current_version_arr[1]} ${current_version_arr[2]})
target_version=$(printf '1%02d%02d%02d' ${target_version_arr[0]} ${target_version_arr[1]} ${target_version_arr[2]})


if [[ ${current_version} > ${target_version} ]]; then
  echo -e "\e[31m不支持降级\e[0m"
  return 2
fi

if [[ "${__current_version}" = "v1"* ]] || [[ "${__current_version}" = "v2"* ]]; then
  if [[ "${__target_version}" = "v3"* ]]; then
    echo -e "\e[31m不支持升级到此版本\e[0m"
    return 2
  fi
fi

if [[ ${__current_version} =~ "lts" ]];then
   if [[ ! ${__target_version} =~ "lts" ]];then
      log "从LTS版本升级到非LTS版本,此版本包含实验性功能请做好数据备份工作"
      read -p "是否确认升级? [n/y]" __choice </dev/tty
      case "$__choice" in
         y|Y) echo "继续安装...";;
         n|N) echo "退出安装..."&exit;;
         *) echo "退出安装..."&exit;;
      esac
   fi
else
   if [[ $(cat ${__current_dir}/metersphere/version) =~ "lts" && ${INSTALL_TYPE} == "upgrade" ]];then
      log "\e[31m从非LTS版本升级到LTS版本后,后续只能自动升级LTS版本,如升级非LTS版本,需手动升级!\e[0m"
      read -p "是否确认升级? [n/y]" __choice </dev/tty
      case "$__choice" in
         y|Y) echo "继续安装...";;
         n|N) echo "退出安装..."&exit;;
         *) echo "退出安装..."&exit;;
      esac
   fi
fi

log "拷贝安装文件到目标目录"

mkdir -p ${MS_BASE}/metersphere
cp -f ./metersphere/version ${MS_BASE}/metersphere/version
cp -rv --suffix=.$(date +%Y%m%d-%H%M) ./metersphere ${MS_BASE}/

# 记录MeterSphere安装路径
echo "MS_BASE=${MS_BASE}" > ~/.msrc
# 安装 msctl 命令
cp msctl /usr/local/bin && chmod +x /usr/local/bin/msctl
ln -s /usr/local/bin/msctl /usr/bin/msctl 2>/dev/null

log "======================= 开始安装 ======================="
#Install docker & docker-compose
##Install Latest Stable Docker Release
if which docker >/dev/null; then
   log "检测到 Docker 已安装,跳过安装步骤"
   log "启动 Docker "
   service docker start 2>&1 | tee -a ${__current_dir}/install.log
else
   if [[ -d docker ]]; then
      log "... 离线安装 docker"
      chmod +x docker/bin/*
      cp docker/bin/* /usr/bin/
      cp docker/service/docker.service /etc/systemd/system/
      chmod 754 /etc/systemd/system/docker.service
      log "... 启动 docker"
      service docker start 2>&1 | tee -a ${__current_dir}/install.log

   else
      log "... 在线安装 docker"
      curl -fsSL https://resource.fit2cloud.com/get-docker-linux.sh -o get-docker.sh 2>&1 | tee -a ${__current_dir}/install.log
      sudo sh get-docker.sh 2>&1 | tee -a ${__current_dir}/install.log
      log "... 启动 docker"
      service docker start 2>&1 | tee -a ${__current_dir}/install.log
   fi

fi

# 检查docker服务是否正常运行
docker ps 1>/dev/null 2>/dev/null
if [ $? != 0 ];then
   log "Docker 未正常启动,请先安装并启动 Docker 服务后再次执行本脚本"
   exit
fi

##Install Latest Stable Docker Compose Release
if which docker-compose >/dev/null; then
   log "检测到 Docker Compose 已安装,跳过安装步骤"
else
   if [[ -d docker ]]; then
      log "... 离线安装 docker-compose"
      cp docker/bin/docker-compose /usr/bin/
      chmod +x /usr/bin/docker-compose
   else
      log "... 在线安装 docker-compose"
      curl -L https://resource.fit2cloud.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s | tr A-Z a-z)-`uname -m` -o /usr/local/bin/docker-compose 2>&1 | tee -a ${__current_dir}/install.log
      chmod +x /usr/local/bin/docker-compose
      ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
   fi
fi
# 检查docker-compose是否正常
docker-compose version 1>/dev/null 2>/dev/null
if [ $? != 0 ];then
   log "docker-compose 未正常安装,请先安装 docker-compose 后再次执行本脚本"
   exit
fi

# 将配置信息存储到安装目录的环境变量配置文件中
echo '' >> ${MS_BASE}/metersphere/.env
cp -f ${__current_dir}/install.conf ${MS_BASE}/metersphere/install.conf.example
# 通过加载环境变量的方式保留已修改的配置项,仅添加新增的配置项
source ${__current_dir}/install.conf
source ~/.msrc >/dev/null 2>&1
__ms_image_tag=${MS_IMAGE_TAG}
source ${MS_BASE}/metersphere/.env
# 把原来kafka的配置合并成IP
if [ ${MS_KAFKA_HOST} = 'kafka' ];then
  MS_KAFKA_HOST=${__local_ip}
fi
export MS_IMAGE_TAG=${__ms_image_tag}
env | grep MS_ > ${MS_BASE}/metersphere/.env
ln -s ${MS_BASE}/metersphere/.env ${MS_BASE}/metersphere/install.conf 2>/dev/null
grep "127.0.0.1 $(hostname)" /etc/hosts >/dev/null || echo "127.0.0.1 $(hostname)" >> /etc/hosts
msctl generate_compose_files
msctl config 1>/dev/null 2>/dev/null
if [ $? != 0 ];then
   msctl config
   log "docker-compose 版本与配置文件不兼容或配置文件存在问题,请重新安装最新版本的 docker-compose 或检查配置文件"
   exit
fi

exec > >(tee -a ${__current_dir}/install.log) 2>&1
set -e
export COMPOSE_HTTP_TIMEOUT=180
cd ${__current_dir}
# 加载镜像
if [[ -d images ]]; then
   log "加载镜像"
   for i in $(ls images); do
      docker load -i images/$i
   done
else
   log "拉取镜像"
   msctl pull
   curl -sfL https://resource.fit2cloud.com/installation-log.sh | sh -s ms ${INSTALL_TYPE} ${MS_IMAGE_TAG}
   cd -
fi

log "启动服务"
msctl down -v
msctl up -d --remove-orphans

msctl status

echo -e "======================= 安装完成 =======================\n"

echo -e "请通过以下方式访问:\n URL: http://\$LOCAL_IP:${MS_SERVER_PORT}\n 用户名: admin\n 初始密码: metersphere"
echo -e "您可以使用命令 'msctl status' 检查服务运行情况.\n"

可以看到拉取镜像是通过msctl这个脚本来执行的,继续查看msctl

#!/bin/bash
action=$1
target=$2
args=$@

source ~/.msrc >/dev/null
MS_BASE=${MS_BASE:-/opt}
COMPOSE_FILES=$(cat ${MS_BASE}/metersphere/compose_files 2>/dev/null || echo "")
source ${MS_BASE}/metersphere/install.conf
export COMPOSE_HTTP_TIMEOUT=180

function usage() {
  echo "MeterSphere 控制脚本"
  echo
  echo "Usage: "
  echo "  ./msctl.sh [COMMAND] [ARGS...]"
  echo "  ./msctl.sh --help"
  echo
  echo "Commands: "
  echo "  status    查看 MeterSphere 服务运行状态"
  echo "  start     启动 MeterSphere 服务"
  echo "  stop      停止 MeterSphere 服务"
  echo "  restart   重启 MeterSphere 服务"
  echo "  reload    重新加载 MeterSphere 服务"
  echo "  upgrade   升级 MeterSphere 至最新版本"
  echo "  upgrade [RELEASE]  根据版本号搜索离线包,升级 MeterSphere 至对应版本"
  echo "  uninstall 卸载 MeterSphere 服务"
  echo "  version   查看 MeterSphere 版本信息"
}

function generate_compose_files() {
  compose_files="-f docker-compose-base.yml"
  mkdir -p ${MS_BASE}/metersphere/logs/metersphere
  mkdir -p ${MS_BASE}/metersphere/logs/result-hub
  mkdir -p ${MS_BASE}/metersphere/logs/task-runner
  case ${MS_INSTALL_MODE} in
  allinone)
    compose_files="${compose_files} -f docker-compose-metersphere.yml -f docker-compose-task-runner.yml -f docker-compose-result-hub.yml"
    ;;
  server)
    compose_files="${compose_files} -f docker-compose-metersphere.yml"
    ;;
  task-runner)
    compose_files="${compose_files} -f docker-compose-task-runner.yml"
    ;;
  middleware)
    compose_files="${compose_files} -f docker-compose-result-hub.yml"
    ;;
  *)
    log "... 不支持的安装模式,请从 [ allinone | server | task-runner | middleware ] 中进行选择"
    ;;
  esac
  if [ "${MS_INSTALL_MODE}" != "task-runner" ] && [ "${MS_INSTALL_MODE}" != "server" ]; then
    # 是否使用外部数据库
    if [ "${MS_EXTERNAL_MYSQL}" = "false" ]; then
      mkdir -p ${MS_BASE}/metersphere/data/mysql
      chmod 655 ${MS_BASE}/metersphere/conf/my.cnf
      compose_files="${compose_files} -f docker-compose-mysql.yml"
      # 中间件去掉 depends_on
      if [ "${MS_INSTALL_MODE}" = "middleware" ]; then
        sed -i -e '/metersphere:/,+3d' ${MS_BASE}/metersphere/docker-compose-mysql.yml
      fi
    fi
    # 是否使用外部 Kafka
    if [ "${MS_EXTERNAL_KAFKA}" = "false" ]; then
      compose_files="${compose_files} -f docker-compose-kafka.yml"
      if [ "${MS_INSTALL_MODE}" = "middleware" ]; then
        sed -i -e '/result-hub:/,+3d' ${MS_BASE}/metersphere/docker-compose-kafka.yml
      fi
    fi

    # 是否使用外部 Redis
    if [ "${MS_EXTERNAL_REDIS}" = "false" ]; then
      mkdir -p ${MS_BASE}/metersphere/data/redis
      compose_files="${compose_files} -f docker-compose-redis.yml"
      if [ "${MS_INSTALL_MODE}" = "middleware" ]; then
        sed -i -e '/metersphere:/,+3d' ${MS_BASE}/metersphere/docker-compose-redis.yml
      fi
    fi
    # 是否使用外部 minio
    if [ "${MS_EXTERNAL_MINIO}" = "false" ]; then
      mkdir -p ${MS_BASE}/metersphere/data/minio
      compose_files="${compose_files} -f docker-compose-minio.yml"
    fi

  fi
  echo ${compose_files} >${MS_BASE}/metersphere/compose_files
  chmod 777 -R ${MS_BASE}/metersphere/logs/metersphere
  chmod 777 -R ${MS_BASE}/metersphere/logs/result-hub
  chmod 777 -R ${MS_BASE}/metersphere/logs/task-runner
  chmod +rw -R ${MS_BASE}/metersphere/conf
  chmod +rw -R ${MS_BASE}/metersphere/*.yml
  COMPOSE_FILES=$(cat ${MS_BASE}/metersphere/compose_files 2>/dev/null || echo "")
}

function download() {
  git_urls=('github.com' 'hub.fastgit.org' 'ghproxy.com/https://github.com')

  for git_url in ${git_urls[*]}; do
    success="true"
    for i in {1..3}; do
      echo -ne "检测 ${git_url} ... ${i} "
      curl -m 5 -kIs https://${git_url} >/dev/null
      if [ $? != 0 ]; then
        echo "failed"
        success="false"
        break
      else
        echo "ok"
      fi
    done
    if [ ${success} == "true" ]; then
      server_url=${git_url}
      break
    fi
  done

  if [ "x${server_url}" == "x" ]; then
    echo "没有找到稳定的下载服务器,请稍候重试"
    exit 1
  fi
  echo "使用下载服务器 ${server_url}"
  cd /tmp
  wget -nv -T 60 -t 1 --no-check-certificate https://${server_url}/metersphere/metersphere/releases/download/${MS_LATEST_VERSION}/metersphere-ce-online-installer-${MS_LATEST_VERSION}.tar.gz -O /tmp/metersphere-ce-online-installer-${MS_LATEST_VERSION}.tar.gz
  if [ $? -ne 0 ]; then
    echo -e "\e[31m升级失败:连接下载服务器超时!\n可手动下载升级包,然后执行\e[1;33m msctl upgrade ${MS_LATEST_VERSION} \e[0;31m离线升级\e[0m"
    return 2
  fi
}

function status() {
  echo
  cd ${MS_BASE}/metersphere
  docker-compose ${COMPOSE_FILES} ps
}
function start() {
  echo
  cd ${MS_BASE}/metersphere
  docker-compose ${COMPOSE_FILES} start ${target}
}
function stop() {
  echo
  cd ${MS_BASE}/metersphere
  docker-compose ${COMPOSE_FILES} stop ${target}
}
function restart() {
  echo
  cd ${MS_BASE}/metersphere
  docker-compose ${COMPOSE_FILES} stop ${target}
  docker-compose ${COMPOSE_FILES} start ${target}
}
function reload() {
  echo
  cd ${MS_BASE}/metersphere
  docker-compose ${COMPOSE_FILES} up -d --remove-orphans
}
function uninstall() {
  echo
  cd ${MS_BASE}/metersphere
  docker-compose ${COMPOSE_FILES} down ${target}
  #
  rm -f ~/.msrc
  rm -f /usr/local/bin/msctl
}
function version() {
  echo
  cat ${MS_BASE}/metersphere/version
}
function upgrade() {
  curl -s https://api.github.com/repos/metersphere/metersphere/releases >/dev/null
  if [ $? -ne 0 ]; then
    echo -e "\e[31m获取最新版本信息失败,请检查服务器到GitHub的网络连接是否正常!\e[0m"
    return 2
  fi
  export MS_VERSION=$(cat ${MS_BASE}/metersphere/version)
  echo -e "\e[32m 检测当前版本为\e[1;33m${MS_VERSION} \e[0m"

  latest_release=""
  release_pattern=""

  # 判断是否是 LTS 版本
  current_version=$MS_VERSION
  if [[ $current_version == v1.* || $current_version == v2.* ]]; then
    release_pattern="v2\.[0-9]+\.[0-9]+-lts$"
  elif [[ $current_version == v3.* ]]; then
    if [[ $current_version == *-lts ]]; then
      release_pattern="v3\.[0-9]+\.[0-9]+-lts$"
    else
      release_pattern="v3\.[0-9]+\.[0-9]+$"
    fi
  else
    release_pattern="v[0-9]+\.[0-9]+\.[0-9]+$"
  fi

  get_releases() {
    # 根据是否是 LTS 版本获取对应的最新版本号
    page=$1
    releases=$(curl -s "https://api.github.com/repos/metersphere/metersphere/releases?page=$page")
    releases=$(echo "${releases}" | grep -o '"name": "[^"]*' | awk -F '[:"]' '{print $5}' | grep '^v')
    for release in $releases; do
      if [[ $release =~ $release_pattern ]]; then
        echo "$release"
        return 0
      fi
    done
    return 1
  }

  page=1
  while [[ $page -le 10 ]]; do
    latest_release=$(get_releases $page)
    if [[ -n $latest_release ]]; then
      break
    fi
    ((page++))
  done

  # 记录最新版本号
  echo "$latest_release" >/tmp/ms_latest_release

  MS_LATEST_VERSION=$(cat /tmp/ms_latest_release)
  if [ "${MS_LATEST_VERSION}" = "" ]; then
    echo -e "未获取到最新版本"
    exit 1
  elif [ "${MS_LATEST_VERSION}" = "${MS_VERSION}" ]; then
    echo -e "最新版本与当前版本一致,退出升级过程"
    exit 0
  else
    echo -e "\e[32m 检测到GitHub上最新版本为\e[1;33m${MS_LATEST_VERSION}\e[0;32m 即将执行在线升级...\e[0m"
  fi
  sleep 5s

  if [ -z "$target" ]; then
    download
  else
    __current_version=${MS_VERSION%-*}
    current_version=${__current_version:1}
    current_version_arr=($(echo $current_version | tr '.' ' '))

    __target_version=${target%-*}
    target_version=${__target_version:1}
    target_version_arr=($(echo $target_version | tr '.' ' '))

    current_version=$(printf '1%02d%02d%02d' ${current_version_arr[0]} ${current_version_arr[1]} ${current_version_arr[2]})
    target_version=$(printf '1%02d%02d%02d' ${target_version_arr[0]} ${target_version_arr[1]} ${target_version_arr[2]})

    if [[ ${current_version} == ${target_version} ]]; then
      echo -e "\e[31m当前版本与目标版本一致\e[0m"
      return 2
    fi

    if [[ ${current_version} > ${target_version} ]]; then
      echo -e "\e[31m不支持降级\e[0m"
      return 2
    fi

    if [[ "${__current_version}" = "v1"* ]] || [[ "${__current_version}" = "v2"* ]]; then
      if [[ "${__target_version}" = "v3"* ]]; then
        echo -e "\e[31m不支持升级到此版本\e[0m"
        return 2
      fi
    else
      MS_LATEST_VERSION=${target}
    fi
    download
  fi

  if [ "${MS_ENTERPRISE_ENABLE}" = "true" ]; then
    echo -e "\e[32m 企业版请通过离线包进行升级\e[0m"
    return 3
  fi

  if [ ! -f "/tmp/metersphere-ce-online-installer-${MS_LATEST_VERSION}.tar.gz" ]; then
    if [ ! -f "/tmp/metersphere-ce-offline-installer-${MS_LATEST_VERSION}.tar.gz" ]; then
      echo -e "\e[31m未找到升级包\e[1;33m/tmp/metersphere-*-installer-${MS_LATEST_VERSION}.tar.gz\e[31m,请检查!\e[0m"
      echo -e "参考下载地址:\e[4;7mwget -T60 -t1 --no-check-certificate https://github.com/metersphere/metersphere/releases/download/${MS_LATEST_VERSION}/metersphere-ce-online-installer-${MS_LATEST_VERSION}.tar.gz -O /tmp/metersphere-ce-online-installer-${MS_LATEST_VERSION}.tar.gz\e[0m"
      return 2
    fi
  fi

  cd /tmp
  tar zxvf metersphere-ce-online-installer-${MS_LATEST_VERSION}.tar.gz
  cd metersphere-ce-online-installer-${MS_LATEST_VERSION}
  /bin/bash install.sh
  rm -rf /tmp/metersphere-ce-online-installer-${MS_LATEST_VERSION}
}

function main() {
  case "${action}" in
  status)
    status
    ;;
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  reload)
    generate_compose_files
    reload
    ;;
  upgrade)
    upgrade
    ;;
  uninstall)
    uninstall
    ;;
  version)
    version
    ;;
  help)
    usage
    ;;
  --help)
    usage
    ;;
  generate_compose_files)
    generate_compose_files
    ;;
  *)
    echo
    cd ${MS_BASE}/metersphere
    docker-compose ${COMPOSE_FILES} $@
    ;;
  esac
}
main $@

通过查看执行文件,可以看出msctl 使用的是 docker-compose 命令(独立二进制),而非 docker compose(V2 插件)
在 msctl 脚本中,所有服务操作都通过以下方式调用:

docker-compose ${COMPOSE_FILES} ps
docker-compose ${COMPOSE_FILES} up -d ...

这意味着:

  • 它依赖系统中安装的 独立 docker-compose 二进制文件(通常是 /usr/bin/docker-compose/usr/local/bin/docker-compose);
  • 而不是 Docker Engine 内置的 Compose V2 插件(命令为 docker compose,注意中间是空格)。

查看docker-compose版本信息

$ docker-compose version
Docker Compose version v2.23.0

当前使用的是独立安装的 docker-compose v2.23.0(不是 docker compose 插件),而这个版本默认使用的 Docker API 版本可能为 1.43,与 Docker Engine 29.0.0(要求最低 API 1.44)不兼容,从而导致错误
升级docker-compose为最新版本后问题解决,docker-compose升级可参考安装独立的 docker-compose 二进制

声明:初心|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - MeterSphere从v3.6.5升级到v3.6.7报错“client version 1.43 is too old”排查过程


愿你勿忘初心,并从一而终