必须加--privileged,因Rancher 2.5+在容器内嵌local Kubernetes集群,需特权执行容器嵌套、挂载宿主机路径及操作cgroup/netns,否则报错failed to start controlplane或Failed to create pod sandbox。

直接用 docker run 能跑起来,但只适合测试;生产环境必须走 Kubernetes + Helm,否则数据、权限、多集群纳管全会出问题。
docker run 启动 Rancher 为什么必须加 --privileged
Rancher 2.5+ 在单容器里内置了一个 local Kubernetes 集群(叫 local 集群),用来调度自己的组件(比如 rancher-webhook)。这个内嵌集群要干三件事:在容器里再起容器、挂载宿主机路径、操作 cgroup 和 netns —— 普通容器权限根本不够。
不加 --privileged 的典型报错:
failed to start controlplanepermission deniedFailed to create pod sandbox
注意:Ubuntu 22.04 默认用 cgroup v2,光加 --privileged 不够,还得补 --cgroup-parent=docker 或换用 rancherd。
docker run 命令里哪些参数不能省
以下组合是验证过的最小可用集,少一个都可能启动失败或无法持久化:
-
-d:后台运行,不然容器一启动就退出 -
--restart=unless-stopped:防止主机重启后 Rancher 消失 -
-p 80:80 -p 443:443:Rancher UI 和 API 全走这两个端口;如果宿主机已有 Nginx/Apache 占用,必须先停掉,或改映射(比如-p 8080:80),但后续得配反向代理 -
--privileged:上文已说明,关键权限开关 -
-v /opt/rancher:/var/lib/rancher:强制持久化数据;不加的话容器删了,所有集群、用户、证书全丢
完整命令示例:
sudo docker run -d --privileged \ --restart=unless-stopped \ -p 80:80 -p 443:443 \ -v /opt/rancher:/var/lib/rancher \ rancher/rancher:stable
生产环境为什么不能只靠 docker run
裸跑 docker run 是单节点、无高可用、无外部存储的“演示模式”,真实场景下立刻踩坑:
- 容器内嵌的
etcd和 API Server 没有外部存储,重启即丢数据 - 没有 RBAC、AD/LDAP 集成能力,无法对接企业身份系统
- 无法导入或创建其他集群(比如你已有的 EKS 或自建 RKE 集群)
所以生产或准生产环境,必须先搭一个 Kubernetes 集群(推荐 K3s),再用 Helm 把 Rancher 装进去。K3s 启动后要确认:sudo systemctl status k3s 显示 Active: active (running),再执行 sudo k3s kubectl get nodes 看是否 Ready。
Helm 安装 Rancher 的关键步骤
Rancher v2.6 之后强制要求通过 Helm 安装,不再支持镜像直启。核心三步:
- 添加 Helm 仓库:
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable,然后helm repo update - 创建命名空间:
kubectl create namespace cattle-system - 安装时指定 TLS 方式:如果用 Let's Encrypt,得提前部署
cert-manager;如果用自签名证书,要传--set tls=external并挂载证书卷
最容易被忽略的是:Helm 安装前,K3s 必须禁用自带的 traefik(加 --disable traefik 参数),否则和 Rancher 自带的 ingress controller 冲突。











