【docker部署redis报错】报错信息:Unable to enable DNAT rule,iptables: No chain/target/match by that name
·
说明:
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
更多推荐



所有评论(0)