恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

CentOS 7无外网环境离线安装Docker完整指南

  • 首页
  • 资讯中心
  • /
  • CentOS 7无外网环境离线安装Docker完整指南

相关资讯

AI私人助理本地部署实战:从零搭建到进阶配置的完整指南 2026/10/20 17:36:57
金智科技SCL工具:从SCD解析到虚端子自动核对 2026/10/20 17:36:57
Selenium Web自动化测试学习路径:从脚本到稳定落地 2026/10/20 17:36:57

最新资讯

多无人机协同目标定位的Matlab仿真:从最小二乘到GDOP验证
Java面试实录:Spring Boot、微服务与Kafka原理深挖
Win7与银河麒麟V10远程桌面互连安装指南:VNC与RDP双向配置
Guava EventBus源码深度解析:线程模型、分发机制与异常处理
OpenCV模板匹配实战:从原理到工程化,彻底掌握目标定位
pywinauto实战:Windows GUI自动化测试与控件定位指南

今日推荐

高频变压器实战经验总结:磁芯选型、绕组工艺与故障排查全解析
U-Boot移植的关键:深入理解Kconfig配置系统与依赖关系
步进电机原理与调试全解析:从步距角到丢步排查

本周热门

基于GMM的语音识别系统原理与MATLAB实现详解
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

CentOS 7无外网环境离线安装Docker完整指南

发布时间:2026/10/20 17:36:57
CentOS 7无外网环境离线安装Docker完整指南 干运维这些年“离线装docker”这个需求我前前后后碰过不下十几次。有的是机房不给外网有的是客户要求内网裸奔部署最后都只能靠一个U盘或者内网FTP把东西带进去。标题里这三个词——CentOS 7、Linux、离线安装docker——几乎概括了这类场景的全部矛盾系统老、环境封闭、缺yum源还要把容器运行时整个铺起来。这篇文章我把完整套路写清楚从联网机器上准备离线包到内网机器装好引擎再到把镜像导进内网、验证跑通一步步说透。1. 离线安装的整体思路为什么麻烦、方案怎么选1.1 离线安装到底难在哪CentOS 7默认的yum源里其实没有docker-ce平时在线装docker要么先加官方源要么用发行版默认的docker包。一旦断网yum install这条路就堵死了一半更麻烦的是docker不是单个rpm它有一串依赖docker-ce本身、docker-ce-cli、containerd.io还有container-selinux这一类系统库包。这些包互相咬着版本缺一个或者版本不对装到一半就报错。而且CentOS 7的glibc、systemd、内核都偏老太新的docker版本装上去可能直接启动不了这一点离线环境下特别坑因为没有互联网帮你确认“哪个版本能跑”只能靠事前选型。很多人以为离线安装就是把没事先下好的docker rpm包拷贝进去rpm -ivh一把梭结果被依赖问题折腾一整天。所以我每次做这类实施第一步永远是在联网机器上把依赖链理顺而不是先碰内网机器。1.2 两条路线rpm批量离线包 vs 静态二进制离线装docker主要有两条路线一条是收集全套rpm离线包拷到内网后用yum localinstall安装。这个方案的好处是安装行为跟在线yum几乎一致装完自带systemd服务、自动生成docker.socket和docker.service管理方式最标准。缺点是要把依赖收集全这一步的坑比较多。另一条是下载docker官方提供的静态二进制压缩包解压后把dockerd、docker等文件放到/usr/bin下自己写systemd unit或者直接nohup启动。这个方案依赖极少只要内核够用就能跑适合rpm依赖怎么都凑不齐的场合。缺点是需要手工维护service文件而且后续升级、卸载都比较麻烦跟系统包管理是两套逻辑。我的经验是能凑齐rpm包就优先走rpm路线因为收尾干净、行为标准。只有在内网机器实在是太老、或者依赖缺得离谱时才考虑静态二进制。下面整篇主线按rpm方案展开静态二进制作为补充方案放在后面讲。1.3 实施前要准备的材料开始动手之前先把下面这些列个清单确认到位不然做到一半发现少东西就很被动一台跟内网机器同版本CentOS 7.x架构x86_64的联网机器用来下载离线包和导出测试镜像一套docker离线rpm目录包括docker-ce、docker-ce-cli、containerd.io和全部依赖一个用于验证的容器镜像tar包比如busybox或nginx因为内网机器装完docker后没有网络拉不了hello-world测试镜像U盘或内网传输通道把离线目录和镜像包传过去。准备工作做好后面基本不会卡壳。2. 联网机器上准备离线安装包2.1 装好yum-utils配一个docker-ce仓库联网机器上先确认能正常访问外网源。第一步是安装yum-utils下面要用到它的repotrack命令来下载依赖包。yum install -y yum-utils然后添加docker-ce仓库。我习惯在/etc/yum.repos.d/下新建一个docker-ce.repo内容大概是这样[docker-ce-stable] nameDocker CE Stable baseurlhttps://docker-ce-repo/linux/centos/7/$basearch/stable enabled1 gpgcheck1 gpgkeyhttps://docker-ce-repo/linux/centos/gpg尖括号里的仓库地址需要换成你实际能访问的docker-ce yum源地址用官方源或者国内镜像源都行。加完后跑一遍makecacheyum makecache这一步做完联网机器就已经能看见docker-ce相关的包了。2.2 用repotrack一把拉全所有依赖很多教程里用的是yumdownloader --resolve但我强烈建议用repotrack。原因是yumdownloader在解析依赖时会参考当前机器的已装情况如果联网机器上恰好已经装了某个依赖包它可能就不下载了结果拷到干净的内网机器上时就缺包。repotrack不管本机装没装会把依赖全量抓下来。先建一个目录然后执行mkdir -p /opt/docker-offline repotrack -a x86_64 -p /opt/docker-offline docker-ce docker-ce-cli containerd.io这样docker-ce、docker-ce-cli、containerd.io以及它们的所有间接依赖都会出现在/opt/docker-offline下面。执行结束后先数一数包有多少个ls /opt/docker-offline | wc -l正常会有二十到四十个左右的rpm文件。一定要把这个目录打包再传输直接用scp传一堆散文件容易漏而且U盘拷贝时小文件太多也慢cd /opt tar czf docker-offline.tar.gz docker-offline到这一步离线安装包就已经准备好了。2.3 版本选型不要盲目追新repotrack下载之前先想清楚要装哪个版本的docker。CentOS 7的内核和系统库决定了它不适合跑太新的docker引擎这一点我在不同内网机器上验证了好几次。我整理了一个自己做选型的参考docker版本系列CentOS 7上的表现适用场景19.03系列老内核也能跑最稳内核特别老的现场比如3.10.0-514之前的系统20.10系列功能均衡兼容性好大多数内网项目稳妥首选24.0系列新特性多但要求内核相对较新内核在3.10.0-957以上的机器离线环境下装了就没法随便拉补丁所以我的原则是保守优先。如果现场内核版本老优先选20.10甚至19.03如果内核比较新选24.0问题也不大。查看仓库里有哪些版本可以这样yum list docker-ce --showduplicates然后指定版本下载比如repotrack -a x86_64 -p /opt/docker-offline docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io-1.6.28具体小版本号以你仓库里实际显示的为准。选完版本后顺手在联网机器上把需要的测试镜像也导出来。2.4 顺手导出一个验证镜像内网机器装完docker后不能直接docker run hello-world因为hello-world镜像也要联网拉。所以要提前在联网机器上拉一个小体积镜像并导出tar包。busybox是最合适的几MB大小拿来测引擎是否正常非常够用docker pull busybox:1.36 docker save busybox:1.36 | gzip /opt/busybox.tar.gz有业务镜像需要一起部署的就挨个docker pull然后save。注意save是导镜像不要用export两者的区别后面专门说。3. 内网CentOS 7上完成Docker引擎安装3.1 环境检查先把系统的底子摸清内网机器上动手之前先花两分钟把环境过一遍。很多装完启动不了的问题其实在环境检查阶段就能避免。我习惯按这个顺序查cat /etc/redhat-release uname -r df -h / getenforce systemctl status firewalld --no-pager | head -5重点看几件事系统版本是不是CentOS 7.x内核版本是多少根分区还够不够大SELinux是Enforcing还是Disabled防火墙开着还是关了。CentOS 7默认内核是3.10系列docker的overlay2存储驱动依赖内核里的overlay模块顺便确认一下模块在不在modprobe overlay modprobe br_netfilter lsmod | grep -E overlay|br_netfilter如果模块不存在先加载再写入自动加载配置避免重启后失效echo overlay /etc/modules-load.d/docker.conf echo br_netfilter /etc/modules-load.d/docker.conf同时把桥接流量转发和IP转发打开这两个参数不设置容器网络经常会出怪问题sysctl -w net.bridge.bridge-nf-call-iptables1 sysctl -w net.ipv4.ip_forward1要想重启后依然生效写成下面这样cat /etc/sysctl.d/99-docker.conf EOF net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 EOF sysctl --system3.2 上传离线包并用yum localinstall安装把之前打包的docker-offline.tar.gz传到内网机器解压后进入目录执行安装。如果内网机器之前装过旧版docker先清干净再装yum remove docker docker-client docker-common docker-engine然后解压并安装tar xzf docker-offline.tar.gz cd docker-offline yum localinstall -y *.rpmyum localinstall会自动解析当前目录下的所有rpm依赖关系只要目录里包全整个安装过程会非常顺。装完以后启动服务systemctl enable --now docker systemctl status docker --no-pager再看一眼版本确认客户端和服务端都正常docker version docker info如果docker version里Server一项能正常显示说明引擎已经跑起来了。万一Server没出来多半是dockerd启动失败了去查日志journalctl -u docker --no-pager | tail -50后面专门讲常见错误。3.3 提前写daemon.json把数据目录落在大分区这是我最想强调的一步不要装完就跑默认配置先把/etc/docker/daemon.json写好再启动或者启动后马上改。CentOS 7的默认数据目录是/var/lib/docker而很多服务器的/分区并不大容器镜像一多/分区被撑满的案例我见得太多了。先确认有没有一个大分区可以放docker数据df -h比如数据盘挂在/data下那就创建目录mkdir -p /data/docker然后写daemon.json{ data-root: /data/docker, log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, exec-opts: [native.cgroupdriversystemd], registry-mirrors: [https://registry.internal.example] }其中registry-mirrors这里写的是内网镜像仓库地址现场有就填实际地址没有就去掉这一项。注意这里不要填外网加速地址内网环境根本访问不到反而会让docker启动时反复尝试连接。如果docker已经启动过并且产生了数据再改data-root就要先停服务再迁移数据systemctl stop docker mv /var/lib/docker/* /data/docker/ systemctl start docker新环境没有历史数据的话直接配好再启动即可。另外exec-opts里的cgroupdriver如果以后要对接k8s保持systemd是对的单机跑容器的话这行可以不加。3.4 备用方案静态二进制也能跑如果内网机器上yum localinstall因为依赖问题怎么都装不上还有一条后备路线用docker官方静态二进制包。下载对应架构的docker-xxx.tgz解压后把内容放到/usr/bintar xzf docker-20.10.24.tgz cp docker/* /usr/bin/然后写一个systemd service文件[Unit] DescriptionDocker Application Container Engine Afternetwork-online.target firewalld.service Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd ExecReload/bin/kill -s HUP $MAINPID Restarton-failure [Install] WantedBymulti-user.target之后同样systemctl daemon-reload systemctl enable --now docker。这个方案依赖极少但收尾不如rpm方案干净所以我只把它当备案。4. 离线镜像的导入与部署验证4.1 save和export千万别搞混离线导入镜像最容易被坑的地方就是把save和export弄混。这两个命令长得像用途完全不一样docker save保存的是一个或多个镜像保留镜像的分层结构、标签、历史信息是标准的镜像分发方式docker export导出的是一个容器的文件系统会把所有历史和分层拍扁导出后没有标签也不能再作为镜像被docker load直接恢复成原来的样子。离线部署场景永远用save和load组合。我在现场见过有人用export导出一堆容器拿到内网load下来发现image名字全是none根本没法用最后只能重新打包。4.2 导入镜像并做一次完整验证把准备阶段导出的busybox.tar.gz传到内网机器执行导入docker load -i busybox.tar.gz如果导出的镜像是gzip压缩过的tar包docker load会自动解压。导入后确认镜像已经在本地列表里docker images然后跑一个容器验证引擎是否正常工作docker run --rm busybox:1.36 echo docker offline ok输出docker offline ok就证明整个docker引擎链路没问题。如果现场需要部署业务镜像比如nginx操作方式一模一样docker load -i nginx-1.24.tar.gz docker run -d --name nginx-test -p 80:80 nginx:1.24 curl http://127.0.0.1curl能返回nginx页面整个部署就算彻底跑通了。4.3 有内网仓库时可以推上去有些内网环境会架自己的镜像仓库那就不需要每个机器都传tar包了。把tar包导入一次打上仓库地址的tag直接pushdocker tag nginx:1.24 registry.internal.example/nginx:1.24 docker push registry.internal.example/nginx:1.24其他机器配置好daemon.json里的registry-mirrors或者直接用完整仓库地址拉镜像就行。如果内网仓库用的是自签名证书需要在daemon.json里加一层insecure-registries配置不然push会被TLS校验挡住。这一步细节多但有了前面tar包离线导入打底仓库推送只是可选的锦上添花。5. 我踩过的坑典型问题速查与排查技巧5.1 依赖地狱和container-selinux版本冲突离线安装最常见的失败场景是yum localinstall进行到一半突然弹出一堆依赖缺失。这种情况十有八九是离线rpm目录没收集全或者是在联网机器上用了yumdownloader而不是repotrack漏掉了某些依赖。排查思路很直接看报错信息里缺的是哪个包然后回到联网机器用yumdownloader单独补下那个包再拷回内网装上。如果缺的包比较多干脆重新repotrack一遍别一个个补太浪费时间。另一个高频问题container-selinux包版本与docker-ce要求的版本不匹配。CentOS 7基础源里的container-selinux往往比较老docker-ce依赖的版本更高一点。解决方式有两种一种是在联网机器的docker-ce仓库里把最新container-selinux下载回来另一种是去epel源里找对应版本。装上高版本container-selinux后再跑yum localinstall就不会再卡在这一步。5.2 装完引擎却启动不了cgroup、iptables、SELinuxdocker启动失败第一件事永远是journalctl -u docker查看日志别瞎猜。我遇到过的几种典型情况SELinux处于Enforcing状态导致的权限错误日志里会出现permission denied相关的字样特别是存储目录权限有问题时。可以临时验证一下setenforce 0 systemctl restart docker如果照做后docker正常了说明确实是SELinux拦截需要权衡是调整策略还是把SELinux改成permissive。生产环境要慎重改SELinux但CentOS 7配老docker时改permissive是不少运维的实际选择。iptables相关的问题也很多。CentOS 7默认的firewalld如果没放行容器需要的转发流量容器网络会异常。最直接的方法是把firewalld的端口规则配清楚而不是简单关防火墙。业务端口按需放行firewall-cmd --permanent --add-port80/tcp firewall-cmd --reload另外如果启动docker时日志里提示overlay2驱动不支持重点检查内核模块和挂载参数。overlay模块加载好后再看/和/data的挂载是否支持overlay。xfs文件系统如果开启了某些特殊挂载选项也会影响overlay2驱动。5.3 磁盘被容器日志撑爆容器跑一段时间后磁盘满了这个问题在离线环境更隐蔽因为没有监控系统帮你提前发现。根因一般是默认json-file日志驱动不会限制文件大小日志文件无限增长。我用daemon.json里的log-opts限制日志轮转上面已经写过max-size和max-file。但注意这个配置只对新建容器生效已经存在的容器改配置后不会自动收缩需要条件重建。所以最稳妥的做法是在daemon.json刚配好、还没启动业务容器之前就加上日志限制别等出事了再补。磁盘不充足的机器建议把data-root和日志目录都放到大分区上镜像tar包删除前确认已经加载进了docker别删早了镜像没load进去又要回联网机器重新搞一套。5.4 离线环境下的docker info警告装完后顺手跑一下docker info看看警告信息。离线环境下常见两类警告一类是警告说没有配置registry mirror某些pull请求会直接请求官方仓库。这在内网环境是正常的因为我们本来就打算离线导入不需要理会。另一类是存储驱动警告提示overlay2不被当前内核支持。这个时候想想是不是之前环境检查漏了overlay模块或者内核实在老得无法支持overlay2。老内核确实跑不动overlay2的话可以尝试vfs驱动但性能和镜像占用都很难看这种机器我建议干脆别上docker或者升级内核再考虑。5.5 我的几条避坑心得做多了离线部署慢慢总结出几条习惯这里一次性分享出来离线rpm目录永远用repotrack整依赖不用yumdownloader也不要手工rpm -ivh --nodeps强装。后者虽然能装上但服务跑起来后缺依赖的隐患会让人痛不欲生内网机器的时间要校准镜像tar包导入虽然不校验时间但容器内应用经常依赖系统时间时间错乱会排查很久把离线包做成一个包含版本号的标准目录比如docker-20.10.24-centos7-x86_64/传给别人或者过几个月自己回看都清爽每台内网机器装完docker后拍一份docker info和docker version的输出存档出问题好对比。离线装docker这件事第一次做会觉得很麻烦主要是依赖和网络的问题在捣乱。但只要把联网准备阶段的功课做足把版本选型、依赖收集、镜像导出都固化成一个流程后面每套内网环境部署其实都大同小异。我个人现在做离线安装最大的体会是前期的材料清单和版本匹配比内网机器上的安装命令更值得花时间目录一乱、版本一错往往要来回折腾好几趟。如果你也正要处理CentOS 7的离线环境按这个流程走一遍应该能少踩不少坑。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号