说明:
1、系统环境:操作系统为 openEuler(欧拉),架构为 ARM64。
2、部署目标:在该环境中部署 Qwen-32B 大模型。
3、运行时依赖:Qwen-32B 依赖昇腾(Ascend)AI 加速硬件,必须使用 ascend-docker-runtime 作为容器运行时,否则无法调用 NPU 资源。
4、冲突问题:大多数中间件(如 Redis)通常基于标准的 runc 运行时部署。然而,在当前环境中,由于系统默认或强制使用 ascend-docker-runtime,导致这些中间件容器启动失败。
5、具体报错:以 Redis 为例,容器启动时报错 “iptables 规则无法写入”,根本原因在于 ascend-docker-runtime 与标准网络插件或 iptables 管理机制存在兼容性问题。

一、报错信息如下所示:

1、报错信息:
62697e40efa9c41b2a5da4b54c8381fe98d02b024d19fcf0c8fc6f2cbf6a562b
docker: Error response from daemon: driver failed programming external connectivity on endpoint redis (2d9168fcbb729799533b02e97be5da06cc016edc84d54151bbecfa33c9a737c0): Unable to enable DNAT rule:  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 6379 -j DNAT --to-destination 172.17.0.2:6379 ! -i docker0: iptables: No chain/target/match by that name.

2、报错信息
8694e7e6feb0a9b3005b57cb59e60e0f0b6bbb1c741062179f803640292487dd
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v2.task/moby/8694e7e6feb0a9b3005b57cb59e60e0f0b6bbb1c741062179f803640292487dd/log.json: no such file or directory): /usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime did not terminate successfully: exit status 1: unknown

二、解决方法:

1、对于第一点报错,无法将iptable规则写进防火墙策略

解决方法:
1)重启docker服务即可解决,但重启docker服务会对正在运行的业务有影响

# 重启docker服务,不重启应用业务添加以下选项
vi /etc/docker/daemon.json

# 添加这个选项
"live-restore": true, 

# 参数说明:
这个参数重启docker服务,对于正常运行的应用业务无影响

# 执行命令重启docker
systemctl daemon-reload
systemctl restart docker
systemctl status docker

2、对于第二点报错报runc问题
解决方法:
1)我们不能更改docker配置文件,如果更改配置文件导致大模型无法调用 NPU 资源。

# 部署大模型的配置文件
vi /etc/docker/daemon.json
{
...
  "data-root": "/data/docker",
  "default-runtime": "ascend",
  "exec-opts": [
     "native.cgroupdriver=systemd"
  ],
  "insecure-registries": [
     "harbor.shop.cn"
  ],
  "live-restore": true,
  "log-driver": "json-file",
  "log-opts": {
     "max-file": "6",
     "max-size": "600m"
  },
  "runtimes": {
    "ascend": {
      "path": "/usr/local/Ascend/Ascend-Docker-Runtime/ascend-docker-runtime",
      "runtimeArgs": []
    }
  }
...
}

# 容器部署redis,指定runc运行即可
  docker run -d --runtime runc \
  --name redis -p 6379:6379 \
  -v /data/redis:/data \
  -v /etc/localtime:/etc/localtime \
  --restart=always redis:7.0.5

说明:--runtime runc:添加参数runc运行,即可解决第二点报错信息

# 查看docker服务
docker ps
docker logs -f redis
Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐