跳转至

排查故障

以下为使用中常见问题的排障方法。

注意:执行下面的命令前,请先使用 sudo -i 切换到 root 账号。

查看 agent 日志

worker-agent、proxy-agent 以及 ft-agent(克隆实例相关)都是用 systemd 部署的,使用 journalctl 命令查看日志。

以 worker-agent 为例:

# 查看服务状态
systemctl status worekr-agent 

# 查看并监听日志
journalctl -xeu worker-agent -f

# 将从 2025-09-01 开始的日志保存到 worker-agent.log 文件
journalctl -u worker-agent --since '2025-09-01' > worker-agent.log

重启 agent 服务

systemctl restart worker-agent
systemctl restart proxy-agent
systemctl restart ft-agent

检查软件源是否正常

安装 agent 之前请先执行下面的命令检查操作系统的软件源是否正常,如果执行失败或者有异常信息,那么需要提前处理,然后再继续安装。

  • Ubuntu: apt update
  • CentOS: yum update

机器健康状态异常

dockerd 版本错误

worker-agent 日志显示 failed to get machine hardware info: docker version not right,说明 dockerd 版本错误,需要使用私有云支持的 dockerd 版本。

参考部署文档再次安装 worker-agent 即可,同时也会安装正确的 dockerd。

注意:如果之前安装的时候指定了 --docker-root-dir 参数,那么这里也需要要指定。

无法连接私有云服务端

worker-agent 日志显示 dial tcp: lookup cloud.seetaclod.com: i/o timeout,说明机器的 DNS 有问题,或使用的网络有问题。

实例创建失败

一般创建失败时,网页实例【创建失败】状态旁边会显示简要原因,如果从该原因无法判断故障来源,那么请登录该实例所在的机器,按照下面的步骤排查。

首先确认是否可以正常创建容器。

# 创建一个简单 GPU 容器的命令,验证是否创建容器过程中存在 docker 的问题。往往 GPU 故障会导致无法创建容器。
docker run -it --rm --gpus=all python:3.10 bash

如果可以创建容器,那么查看 worker-agent 的日志继续排查。

实例开机异常

nvidia-docker 缺失

实例开机异常,显示 Error response from daemon: could not select device driver nvidia with capabilities: [[compute utility graphics video]],或者类似信息,说明无法选择 NVIDIA 的设备驱动,可以执行 nvidia-docker -v 看一下,此时应该是找不到 nvidia-docker 命令的。

参考部署文档再次安装 worker-agent 即可,同时也会安装 nvidia-docker。

注意:如果之前安装的时候指定了 --docker-root-dir 参数,那么这里也需要要指定。

无法使用 GPU

实例开机异常,显示 Error response from daemon: failed to create task fo r container: failed to create shim task: OCI runtime cr eate failed: runc create failed: unable to start contain er process: error during container init: error running h ook #0: error running hook: exit status 1, stdout: , std err: Auto-detected mode as 'legacy' nvidia-container -cli: device error: GPU-584de83d-edd4-066c-a003 -907ba67aecb: unknown dev,或者类似信息,说明现在机器上不存在 GPU-584de83d-edd4-066c-a003-907ba67aecb 这个 GPU,或者掉驱动导致无法使用这个 GPU。

可以在机器上先执行 nvidia-smi -L 获取现在机器上实际存在的 GPU,再与【系统管理 - 集群管理 - 主机GPU】页面上的 GPU 列表进行对比,将实际不存在的 GPU 从页面上删除,再重启实例。

实例无法关机

首先在私有云租户管理员后台的主机管理中,确认该实例所在的机器的健康状态,如果健康状态为异常那么登录该机器,检查下面的项目:

  1. 执行 nvidia-smi 确认 GPU 正常。如果卡住了那么解决 GPU 问题(如重启服务器等)。

  2. 执行 docker ps 确认 docker 正常。

  3. 查看 worker-agent 日志。

克隆失败

克隆失败的主要原因是 /etc/privatecloud/worker-agent.yaml 配置中的 ssh 账号密码问题。

排查:

  1. /etc/privatecloud/worker-agent.yaml 配置中的 ssh 账号是否为 root 用户,由于跨机器拷贝 docker 目录下的文件,需要 root 用户才能写入。

  2. 如果机器间配置密钥做免密 ssh 登录的方式,请确认密钥/公钥配置在 /root/.ssh/ 目录下,而不是其他 HOME 用户目录下。

然后进行测试:先确认源实例和目标实例所在的机器,然后在源机器去 ssh 登录目标机器,确认是否可以正常登录(登录时请先切换到 root 用户,这样更符合实际情况)。

SSH 无法连接,JupyterLab 等服务无法访问

使用实例的 JupyterLab 或 SSH 访问实例的过程,都是[ 用户 → proxy agent → 实例 ],所以首先确认[初始化配置中的 proxy agent IP地址] 是否可以正常 ping 通。

这里假设配置的 proxy-agent 的公网地址是 A,内网地址为 B。那么:

  1. 登录实例所在的机器执行命令: ping B (如果没有配置内网地址,那么 ping A),看是否可以 ping 通,如果不能 ping 通请检查网络是否有问题,或者是不是配置错了 IP 地址。

  2. 在用户本地机器(即在哪台机器上打开的实例 JupyterLab)上执行命令:ping A (如果没有配置公网地址,那么 ping B)。

  3. 如果以上两项均正常,那么找到实例的 JupyterLab 或 SSH 的访问地址,该地址中有一个端口号(比如20000)。然后登录 proxy-agent 所在的机器,执行命令:telnet localhost 20000 ,如果 telnet 可以通,那么说明[ 用户 → proxy agent → 实例 ]该链路中,proxy 和实例之间的链路正常,问题在用户和 proxy 之间的链路。否则为 proxy 和实例之间的链路问题。如果为用户和 proxy 之间的链路问题,请检查端口的安全组是否已开放;如果为 proxy 和实例之间的链路问题,那么登录实例所在的机器,查看该实例容器的日志。

docker logs -f $(docker ps -a | grep '实例ID' | awk '{print $1}')

如果日志中显示 login to server failed 或者类似信息,说明实例容器所在的机器与 proxy-agent 的网络不通。

使用自定义镜像创建的实例 SSH 无法连接,JupyterLab 等服务无法访问

启动容器时,私有云会传入一个 CMD,容器必须运行这个 CMD 才能正常接入私有云。

也就是说,根据 Dockerfile 构建后的镜像实际运行时需要正常运行传入的 CMD。

不建议在 Dockerfile 中配置 ENTRYPOINT。如果配置了 ENTRYPOINT,请运行传入的 CMD。

多个实例开启 --net=host 配置后 SSH 无法连接

如果同一台机器上有多个容器实例开启了 --net=host 配置,并处于运行中的状态,那么只有一个实例可以通过 SSH 访问。

正常的端口映射,例如 12345:22,是将机器的 12345 端口与容器的 22 端口进行映射。

开启 --net=host 配置后,会直接占用机器的 22 端口,但是为了避免和机器上已有的 SSH 服务冲突,私有云会占用机器的 11022 端口而不是 22 端口。

但是如果有多个实例开启了 --net=host 配置那么会有端口冲突,所以无法访问。

掉驱动

实例容器显示 Failed to initialize NVML: Unknown Error

这个问题属于机器驱动软件层面和 OS 内核层面的问题,出现的原因是驱动中的某些文件在容器运行期间变化了。

最好用 .run 文件重装一次驱动,并关闭驱动自动更新。

参考更换GPU驱动文档StackOverflow 上的讨论

修改克隆锁定中状态的实例为关机状态

登录租户管理员账号,在 【系统管理 - 数据管理 - 容器实例】页面将实例强制关机。

在另一台机器上使用保存的镜像

如果想要在另一台机器上使用保存的镜像的话,需要将镜像保存到镜像仓库,例如 Harbor,参考本地镜像仓库文档

保存镜像时如果选择了将镜像保存到当前实例所在的机器,那么这个镜像只有在创建实例、克隆实例时选择了这个机器才能被使用。

实例容器的目录在机器上的位置

实例容器的系统盘 / 在机器上的位置

docker inspect $(docker ps -a | grep '实例ID' | awk '{print $1}') | grep 'UpperDir' | awk -F: '{print $2}' | sed 's_[",]__g'

实际上 Docker 容器的系统盘不是单个目录,上面的命令只是为了方便拷贝数据。

Docker 容器的存储结构参考 OverlayFS storage driver 文档

实例容器的数据盘 /root/autodl-tmp 在机器上的位置

docker inspect $(docker ps -a | grep '实例ID' | awk '{print $1}') | grep 'Target' -B 1 | grep '\-storage' | awk -F: '{print $2}' | sed 's_[",]__g'

列出机器上所有容器的系统盘使用大小

#/usr/bin/env bash

containers=$(docker ps -a --filter 'name=autodl-container*' --format '{{.Names}}')

for container in ${containers}; do
  dir=$(docker inspect ${container} | grep 'UpperDir' | awk -F':' '{print $2}' | sed 's_[,"]__g')
  sizeAndPath=$(du -sh ${dir})
  echo ${container} ${sizeAndPath}
done

机器重装系统

执行 docker info 看一下 Docker Root Dir 的目录在机器的哪个硬盘。

如果是机器的系统盘的话,重装系统(格式化系统盘)后所有实例容器的数据都会被清空。如果是这种情况的话,建议先将 Docker Root Dir 目录迁移到其他硬盘(先将实例都关机),参考迁移docker root dir目录文档

重装系统后,之前迁移出来的目录可以迁移回机器系统盘。如果不想再换地方,那么在安装 worker-agent 时使用 --docker-root-dir 指定目录,安装 worker-agent 的时候会安装 docker,同时配置 docker 的目录为这个指定的目录。如果是自己安装 docker 的话,需要手动修改一下配置。