新闻详情

新闻详情

首页 / 资讯中心 / 详情

Ubuntu 24.04 内网部署 Docker 与 Rancher 2.x 完整实践指南

发布时间:2026/9/30 12:04:04来源:尧图网络
Ubuntu 24.04 内网部署 Docker 与 Rancher 2.x 完整实践指南
最近连续做了两个内网交付项目目标很明确在 Ubuntu 24.04 上把 Docker 和 Rancher 2.x 跑起来后面研发团队要靠这套环境来管理容器集群。这类活儿网上一搜一大把教程但一落到“私有化”这三个字上很多命令就不是照抄能跑通的了。外网教程默认你能访问 Docker 官方源、默认镜像拉取没问题、默认系统源是好的可在一个只开放了内网端口、连外网都不太稳定的环境下这些默认项全都要重新设计。这篇文字就是我这次交付过程的完整记录从换源、装 Docker、镜像离线导入到 Rancher 界面能正常登录每一步都写清楚背后逻辑和需要规避的坑。1. 部署方式选择先回答三个问题再动手动手之前别急着敲命令。私有化安装最怕的不是不会装而是装到一半发现方案根本跑不通。我建议先回答清楚三个问题整个方案的方向就定了。1.1 这台服务器到底能不能访问外网很多人对“私有化”的理解不一样。有的环境是完全物理隔离任何外网都不通有的环境只是不能访问某些境外站点但国内站点可以访问还有的是能出去但慢。这决定了你走哪条路完全隔离apt 源、Docker 镜像、GPG key 全部要离线准备好用离线包和离线镜像完成安装能访问国内镜像站可以正常用阿里云、华为云的 apt 源和 Docker 源但访问 Docker Hub 仍然不稳定拉镜像要走国内镜像加速器或私有仓库能访问一切但慢基本可以按照公网教程装但把源换成本地镜像站体验会好很多。我这次遇到的两套环境都是第一种和第二种的混合体apt 源能通到阿里云但 Docker Hub 和相关镜像完全拉不动。所以整体策略是apt 源走国内镜像Docker 用 apt 正常装Rancher 镜像通过外部机器预拉再离线导入。1.2 硬件配置要不要专门抬高Rancher 2.x 本质是一个跑在容器里的 Web 应用里面还集成了一套 Kubernetes 控制面逻辑资源吃得不低。官方推荐 4 核 8G 起步但那是给单个管理节点的最低线。我的建议是 8G 内存保底如果后面还要用这套 Rancher 去创建和管理多个集群内存加到 16G 会更舒服。Rancher 自身和它内部的 etcd 都在容器里跑内存不够最容易出现的现象就是OOM容器反复重启。磁盘方面更值得注意。Rancher 会把集群配置、证书、用户信息、审计日志全部写到/var/lib/rancher目录而 Docker 又默认把镜像和容器数据放在/var/lib/docker。这两个目录如果在系统根分区上运行半年后大概率会碰到一个非常尴尬的困境明明没装什么重应用磁盘却悄悄满了。建议根分区至少留 100G或者直接给/var/lib/docker和/var/lib/rancher做单独挂载点。我在交付时习惯把 Rancher 的数据卷挂到独立的业务盘上既规避根分区空间风险也方便以后备份迁移。1.3 容器网络和端口有哪些前置要求Rancher Server 容器启动后会监听 80 和 443这两个端口如果被系统里其他服务占用后面会非常麻烦。另外如果你准备用 Rancher 来纳管已有的 Kubernetes 集群还要保证管理节点和被纳管集群之间的 6443 端口、以及各 worker 节点的 flannel 或 calico 端口能互通。这些要提前在网络边界防火墙放行别等到界面建集群时才想起来。我在动手前会打一张简单的表操作系统版本、内网 IP、主机名、端口开放清单、数据盘挂载点。这个习惯在交付项目里非常有用尤其是多套环境重复交付时照着表走不会漏。2. 换 apt 源Ubuntu 24.04 的 sources 文件跟以前不一样了2.1 不要再用 sources.list 的老思路如果你以前装过 Ubuntu 20.04 或 22.04大概率知道/etc/apt/sources.list这个文件。到了 Ubuntu 24.04情况变了系统的源配置改到了/etc/apt/sources.list.d/ubuntu.sources格式也从单行 deb 变成了 deb822 多字段格式。这一点很多教程没提导致有人照着老教程去改 sources.list改了半天apt update没有任何变化。正确的做法是直接改ubuntu.sources文件。操作前先把原文件备份一份我是这样写的sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak sudo perl -pi -e s|http://archive.ubuntu.com/ubuntu/|http://mirrors.aliyun.com/ubuntu/|g /etc/apt/sources.list.d/ubuntu.sources sudo perl -pi -e s|http://security.ubuntu.com/ubuntu/|http://mirrors.aliyun.com/ubuntu/|g /etc/apt/sources.list.d/ubuntu.sources sudo apt update阿里云镜像源只是一个例子华为云repo.huaweicloud.com和清华源mirrors.tuna.tsinghua.edu.cn也都行。选哪个看你们机房的出口路由偏好实测下来阿里云和华为云在多数内网环境下都挺稳。2.2 完全隔离环境的换源策略如果这台机器连国内源都不通那“换源”这件事就别想了直接走离线 deb 包方案。具体做法是找一台能联网的同架构机器用apt download或者apt-get install -d把需要的 deb 包全部下好打包拷进内网再用dpkg -i逐个安装。这里要提醒一下docker-ce 的依赖链不短涉及 containerd.io、docker-ce-cli、docker-buildx-plugin、docker-compose-plugin 等手写 dpkg 容易漏依赖。最稳妥的办法是在联网机器上用apt-cache depends递归导出依赖关系再用脚本循环下载。如果公司有条件搭建内网 apt 源直接同步一份完整仓库进去这个投入不算大但一劳永逸。不过如果你只是想快速把 Rancher 跑起来且又有软硬件的运维权限我建议优先想办法让 apt 源能通到国内镜像哪怕用临时加路由的方式都比纯离线 dpkg 折腾半天要省事。Docker 那一串 deb 包离线搞起来真的挺痛苦。3. 安装 Docker 引擎GPG、apt 源和 daemon.json3.1 添加 Docker 官方源的国内镜像地址apt 源准备好之后Docker 的安装就相对常规了。第一步是导入 Docker 仓库的 GPG key。注意 Ubuntu 24.04 上apt-key这个工具已经标记为废弃不要再用老教程里的apt-key add方式。标准做法是把 key 保存到/etc/apt/keyrings目录然后在 apt 源里通过signed-by指定。如果你能访问国内镜像站直接从阿里云拉 GPG keysudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.gpg sudo chmod ar /etc/apt/keyrings/docker.gpg如果你是完全内网就得在能联网的机器上先把这个 gpg 文件下载下来再拷进去。不要小看这一步很多内网安装失败都是卡在 GPG key 导不进去。接着添加 apt 源。Ubuntu 24.04 的代号是 noble所以直接写成echo deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu noble stable | sudo tee /etc/apt/sources.list.d/docker-ce.list sudo apt update如果apt update能看到 docker-ce 这个包说明源配置没有问题。然后安装sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin装完用docker version验证看到 Client 和 Server 两段版本信息都在说明 daemon 起来了。3.2 daemon.json 怎么配才是私有化环境的正确姿势网上大部分教程都会让你在/etc/docker/daemon.json里加 registry-mirrors这是为了避免从 Docker Hub 拉镜像慢。但私有化环境要分情况讨论。如果你的网络能通到国内镜像加速器加一段 registry-mirrors 确实能明显提升docker pull体验。我常用的加速地址会在阿里云容器镜像服务控制台里申请注册账号后在“镜像工具 镜像加速器”页面能看到专属地址形如xxx.mirror.aliyuncs.com。这个地址比公共加速器稳定而且是跟账号绑定的。加上之后再配合日志限制和存储驱动配置大致长这样{ registry-mirrors: [https://xxx.mirror.aliyuncs.com], data-root: /data/docker, exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, storage-driver: overlay2 }如果这台机器完全不能访问外网registry-mirrors 这一项就直接删掉。你后续的镜像来源是内网 Harbor 或离线 tar 包保留一个根本 ping 不通的 mirror 地址反而会让docker pull多一次失败重试纯耽误时间。daemon.json 里另外几个字段值得多说两句>sudo systemctl restart docker docker info确认 Docker 的 Storage Driver 是 overlay2Cgroup Driver 是 systemdData Root 指向了预期路径再继续下一步。4. Rancher 2.x 镜像内网化save、load 与私有仓库的组合拳4.1 在能联网的机器上先拉 Rancher 镜像Rancher 的官方镜像托管在 Docker Hub仓库名是rancher/rancher。私有化环境下一个比较明确的选择是先找一台能访问 Docker Hub 的机器把镜像拉下来save 成 tar 包再传到内网机器 load。如果你们内网已经搭了 Harbor还可以把镜像 push 到 Harbor所有服务器统一从 Harbor 拉取。版本上我这次用的是rancher/rancher:v2.8.4。2.x 版本里 v2.7 已经很稳定v2.8 也到了可用的成熟期具体用哪个 tag 看你们对 Kubernetes 版本和 Rancher 新特性的需求。不要盲追 latestRancher 这种架构级工具版本确认过再固定下来比追求新功能重要得多。联网机器上执行docker pull rancher/rancher:v2.8.4 docker save rancher/rancher:v2.8.4 -o rancher-v2.8.4.tar这个 tar 包体积大概在 1GB 到 1.5GB 之间看版本差异。拷回内网时注意移动介质的格式和大小限制如果以后连全套 Kubernetes 组件镜像一起导出动不动就是好几个 GB建议用 exFAT 格式的 U 盘或直接走内网 scp 传输。4.2 内网机器的 load 与 tag 处理镜像 tar 包传到内网目标机器后执行docker load -i rancher-v2.8.4.tar docker images确认能看到rancher/rancher:v2.8.4这一行说明导入完整。这里有个很容易翻车的细节docker load会把镜像还原成 save 时的仓库名和 tag。如果你镜像是直接从 Docker Hub save 的那 load 下来后名字就是rancher/rancher:v2.8.4直接用这个跑没问题。如果后面要推到内网 Harbor就必须先docker tag改一下仓库前缀再 pushdocker tag rancher/rancher:v2.8.4 harbor.internal/rancher/rancher:v2.8.4 docker push harbor.internal/rancher/rancher:v2.8.4Harbor 项目的命名也建议按镜像归属来建比如一个rancher项目专门放 Rancher 相关镜像一个system项目放 Kubernetes 系统组件镜像。后面 Rancher 建集群时这些组件镜像也要能拉到。4.3 被管理节点上还需要哪些镜像这一节稍微延伸一下因为只装好 Rancher Server 还不够。当你准备用这套 Rancher 去纳管或创建 Kubernetes 集群时各节点上需要预置的镜像远不止 Rancher 这一个。Rancher 创建自定义集群时会在节点上运行 RKE2 节点组件涉及 pause、coredns、metrics-server、ingress-nginx、kube-proxy 等一系列系统镜像。这些镜像是按 Rancher 和 Kubernetes 版本绑定的在 Rancher 文档里能找到对应的 system-default 镜像列表。不同的部署方式差异很大。如果你不用 Rancher 内置建集群而是只把现有集群导入进来管理那被纳管集群的节点只需要 Rancher agent 镜像rancher/rancher-agent。这个场景里内网机器只要能拉到rancher/rancher-agent集群就能纳管成功。所以建议在平台规划时确认好是 Rancher 作为纯管理平台纳管已有集群还是 Rancher 作为集群创建工具。前者需要预置的镜像少很多后者必须在每个节点上离线导入一批组件镜像包否则创建集群时会一直卡在初始化状态。5. 用 docker run 拉起 Rancher Server 并完成初始化5.1 持久化数据卷必须挂载Rancher 启动命令看起来不复杂但有几个参数必须认真对待。最核心的就是数据卷。Rancher 会把所有的配置、证书、用户数据库和集群状态信息写到容器内的/var/lib/rancher目录如果不挂到宿主机容器一删数据全没。正确姿势docker run -d --name rancher-server --restartunless-stopped \ -p 80:80 -p 443:443 \ --privileged \ -v /opt/rancher:/var/lib/rancher \ rancher/rancher:v2.8.4宿主机的/opt/rancher目录建议放在独立数据盘上这个在第一节已经强调过。--restartunless-stopped保证服务器重启后 Rancher 能自己起来不需要人工介入。--privileged参数要不要加Rancher 官方安装命令里不带这个参数也能跑。但如果你后续在 Rancher 内创建的集群要复用这台机器的 docker daemon或者容器里需要挂载宿主机块设备privileged 能少踩很多权限坑。我习惯在偏内网交付时直接加上省得后面出现各种“设备没有权限”的怪问题。5.2 端口冲突时怎么映射如果服务器上 80 或 443 已经被其他服务占用可以把 Rancher 的端口映射到其他高位端口docker run -d --name rancher-server --restartunless-stopped \ -p 8080:80 -p 8443:443 \ --privileged \ -v /opt/rancher:/var/lib/rancher \ rancher/rancher:v2.8.4访问入口就从https://服务器内网IP:8443进入。改了端口后有一点要注意Rancher 后台的 server-url 也要同步改端口否则 Rancher 在界面里跳转、生成 kubeconfig、下发集群配置时都会拿一个错误地址。登录以后在“工具 设置”里能找到 server-url改成https://内网IP:8443改完再保存。5.3 首次初始化获取 bootstrap 密码Rancher 启动后首次访问https://内网IP:443会进入一个引导页要求设置 admin 密码。新版本里初始化密码会随机生成在容器日志里不是你自己随便填。用 docker logs 查看docker logs rancher-server 21 | grep Bootstrap Password日志里能看到一行 Bootstrap Password拿着这个密码去网页上完成首次登录然后马上修改成自己的强密码。如果你用了自签名证书并且浏览器拦截可以直接点击高级继续访问内网环境没有多余精力去搞企业 CA这个自签告警属于预期内现象后面有需要可以再挂企业证书进去。登录进去之后先看左侧菜单能否正常加载。Rancher 启动需要一段时间初始化内部的 Kubernetes 控制面刚启动的 1 到 2 分钟内界面可能转圈这是正常的。等 Rancher 控制台首页能显示集群列表了这套 Rancher Server 才算真正跑起来。后续如果要建自定义集群就在“集群管理”里操作如果只是导入现有集群选择“导入已有集群”并按提示在被纳管节点上运行 agent 即可。6. 私有化环境里最容易翻车的四个细节6.1 时间不同步会让 Rancher 界面报 token 过期第一个坑我必须放在最前面。内网机器如果没有配置 NTP系统时间很容易漂移而 Rancher 内部大量组件依赖 JWT 和证书的有效期判断。这玩意儿的典型症状是Rancher 界面能打开但是登录以后动不动就跳到登录页或者报“token expired”“证书尚未生效”之类的错误。排查半天怀疑是网络问题其实时钟差了半小时。解决办法很简单Ubuntu 24.04 直接用 chrony 同步时间sudo apt install -y chrony sudo systemctl enable --now chrony装完后用chronyc sources -v查看同步输出。内网如果自己搭了 NTP 服务器把/etc/chrony/chrony.conf里的 pool 指向内网 NTP 地址就行。这个步骤一定要在启动 Rancher 之前做否则后面出现的问题极其隐蔽。6.2 ufw 会把 Docker 的端口映射拦在门外Ubuntu 默认装了 ufw 防火墙。Docker 启动时会自动往 iptables 里插入规则实现端口映射但 ufw 的默认策略对 FORWARD 链是 DROP两者叠加容器端口映射经常出现“容器内端口通、宿主机外部访问不通”的诡异现象。症状就是在服务器本地 curl 内网 IP 的 443 端口能通但从其他机器访问就超时。处理方式有两种。如果这台机器本身就是纯内网交付服务器可以直接放行 Rancher 需要的端口sudo ufw allow 80/tcp sudo ufw allow 443/tcp如果不想碰防火墙只需让 Docker 能正常走转发链可以修改/etc/default/ufw把DEFAULT_FORWARD_POLICY从 DROP 改成 ACCEPT然后sudo ufw reload。两种方式选哪个我倾向于显式放行端口因为改 FORWARD 策略影响面太大后续其他服务的安全规则会变得不好判断。6.3 Server URL 和自签名证书的认知误区Rancher 在首次启动时会把访问地址的 hostname 写进自签名证书。如果你用 IP 直接访问且 server-url 也是按这个 IP 配的理论上不会有太大问题。但在某些版本上Rancher 默认拿到的不是 IP 而是系统的 hostname最后生成证书里的 CN、SAN 全是“rancher-server”这种主机名浏览器访问时告警程度反而更严重。第一台 Rancher Server 启动前建议先规划好主机名和域名。我用的是这种组合主机名设置成rancher-server内网 DNS 加一条rancher-server记录指向这台机器 IP然后在访问 Rancher 的每台办公电脑上hosts 文件也加上对应记录。这样证书里的主机名跟访问地址能对上浏览器提示会少一些。如果确实直接在网页上访问 IP那就在登录后的 server-url 设置里把地址写为https://IP:443保存之后 Rancher 内部组件会按这个地址来重新生成配置。6.4 根分区被 Rancher 拖爆的恢复方法写这个坑是因为我见过不止一次Rancher 跑得好好的某天突然容器异常重启检查后发现根分区 100% 占用。Rancher 的审计日志、集群快照、docker overlay 存储都在往根分区堆一旦满了 docker daemon 和其它进程一起抽风。日志清理、tmp 文件清理能缓一时真正一劳永逸还是把 Docker 数据目录和 Rancher 数据卷迁到大分区。迁移 Docker 数据目录的操作很直接正好也让前面 diemon.json 里配置的>sudo systemctl stop docker sudo rsync -av /var/lib/docker/ /data/docker/然后在 daemon.json 里把>
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

大模型推理优化全链路实践:从PT到生产API 2026/9/30 12:53:57

大模型推理优化全链路实践:从PT到生产API

1. 项目概述:Model-Optimizer 不是工具名,而是一类工程实践的统称“Model-Optimizer”这个标题乍看像某个开源项目或商业软件的名字,但结合你提供的热搜词——TensorRT-LLM、vLLM、NVIDIA、PT文件转换TensorRT、vLLM部署DeepSeek、Docker镜像…

阅读更多 →
OpenClaw源码拆解:智能体编排系统的架构设计与工程实践 2026/9/30 12:53:57

OpenClaw源码拆解:智能体编排系统的架构设计与工程实践

1. 这个项目到底是什么,我为什么花了一周拆它的源码先说结论:OpenClaw 是一个以“代理运行时”为核心的智能体编排系统,它的目标是解决一个现实中很扎手的问题——当你同时接入了多个 AI 模型、多个工具链、多个消息渠道时,如何让…

阅读更多 →
头歌操作系统3.2进程创建:fork、exec、wait与僵尸进程解析 2026/9/30 12:53:56

头歌操作系统3.2进程创建:fork、exec、wait与僵尸进程解析

1. 先搞懂课堂练习3.2到底在考什么在头歌操作系统这门课的课堂练习里,3.2 进程的创建往往是很多人第一次真正和内核打照面的地方。它看起来只是写几行fork,但背后牵着进程控制块、地址空间复制、父子关系、调度时机和回收机制。这个练习的目标很直接&…

阅读更多 →
Vite 构建 Vue3 项目实战:从环境配置到工程化与报错排查 2026/9/30 12:53:56

Vite 构建 Vue3 项目实战:从环境配置到工程化与报错排查

前端圈子有个挺有意思的现象:新项目立项,十个人里有八个直接敲npm create vuelatest,剩下两个还在翻 Webpack 的老配置。但真到动手那一刻,问题就冒出来了——Node 装哪个版本才不炸?pnpm 还是 npm?create-…

阅读更多 →
OpenStack云平台测试报告深度解读:从测试用例到验收脚本的工程实践 2026/9/30 12:53:50

OpenStack云平台测试报告深度解读:从测试用例到验收脚本的工程实践

简介:Openstack云平台项目测试报告面向云平台运维、测试工程师及项目验收人员,用于验证生产集群云平台的功能可用性与运行可靠性。报告模拟云平台运营中的全部功能性操作,并通过模拟服务进程崩溃、硬件故障等方式考察系统稳定性,适…

阅读更多 →
SpringBoot2+Vue3滑雪场管理系统全栈开发实践 2026/9/30 12:53:50

SpringBoot2+Vue3滑雪场管理系统全栈开发实践

1. 项目全貌与技术选型1.1 这套系统到底在解决什么问题滑雪场的日常运营,业务链条远比想象中复杂:顾客要买雪票、租雪具、请教练,还要考虑不同时段的价格策略、旺季的库存压力、会员的储值管理。用Excel管理这些数据,Excel表一旦超…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉