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

RockyLinux 10安装Docker完整指南:环境配置与避坑实践

  • 首页
  • 资讯中心
  • /
  • RockyLinux 10安装Docker完整指南:环境配置与避坑实践

相关资讯

开源第一的Manus | owl 入门教程 附上千问api 方法 2026/10/17 3:49:21
500块的豆包,能帮我搞定这个么?!——用TaoToken统一Key打通Doubao-Seed与Trae Work的HTML生成链路 2026/10/17 3:49:21
Python机器学习预测NBA总冠军:特征工程与蒙特卡洛模拟实战 2026/10/17 3:49:21

最新资讯

Win11电源与电池设置点击异常?六步排查与修复实战指南
基于HTML5的病历文件夹上传并发冲突解决方案
2026国际具身智能技能大赛解读:真机实训与实景实战成焦点
具身智能新范式:In-Context Learning让机器人看视频学任务
两阶段提交2PC详解:原理、实现与分布式事务实践
SVM实战指南:小样本高维场景下的可靠分类与工程落地

今日推荐

Qwen3.5-122B-A10B-singprobe幻觉检测实战:AUC 0.7806,如何实时揪出大模型一本正经的胡话?
NetSpot 实战:用信道分析与频宽优化解决 Wi-Fi 卡顿
C++ split() 字符串分割的五种实现与性能实测

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

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

RockyLinux 10安装Docker完整指南:环境配置与避坑实践

发布时间:2026/10/17 3:49:21
RockyLinux 10安装Docker完整指南:环境配置与避坑实践 RockyLinux 10 发布之后我第一时间在几个测试节点上装了 Docker 环境。本来以为半小时就能搞定结果发现网上的教程大多还停留在 RockyLinux 9 那套流程照着敲完能装上但有几个关键点已经变了。这篇文章把我在 RockyLinux 10 上安装 Docker 的完整过程、遇到的坑和最后定型下来的配置方案都整理出来给正在折腾系统升级或者全新部署的朋友做个参考。先说结论RockyLinux 10 上装 Docker 本身不复杂复杂的是环境适配。如果你是刚把服务器从 9 切到 10或者准备在新机器上初始化运行环境这篇文章可以直接照着操作。我尽量把每个步骤背后的原因也讲清楚方便你根据自己服务器的实际情况做调整。1. 安装前的准备环境和方案选型1.1 RockyLinux 10 跟之前版本不一样的地方RockyLinux 10 的底层变化比 8 到 9 那次要大得多直接影响 Docker 安装的有三点。第一包管理器已经全面切到 dnf5。你在网上搜到的很多教程还是yum install在 RockyLinux 10 上敲yum命令其实也能用因为yum通常是指向dnf的兼容别名但dnf config-manager这类子命令的行为有调整插件路径也变了。后面跟官方源的时候我会单独说。第二RockyLinux 10 的 AppStream 仓库里默认带了比较完整的容器工具集包括 podman、buildah 这些。对普通用户来说这是好事但对要装 Docker 的人来说这反而成了第一个坑——直接安装docker-ce的时候系统大概率会提示包冲突让你先卸载自带的 podman。这个我后面会专门写一段处理办法。第三仓库结构有调整。RockyLinux 10 的 BaseOS 和 AppStream 仓库互相独立启用第三方仓库之前最好先确认你当前的仓库配置是不是处于正常状态。你可以用dnf repolist看一下如果输出为空或者有报错先把基础仓库理顺再继续。另外一个容易被忽略的点是内核模块。Docker 在 RHEL 系系统上依赖overlay、br_netfilter、iptables等一系列内核模块。RockyLinux 10 默认内核一般已经把这几个模块编进去了或者至少可以自动加载但老机器或者自定义内核的情况下可能出现模块缺失导致 Docker 启动失败。安装之前我用modprobe overlay和modprobe br_netfilter预检了一下如果你的机器提示找不到模块先解决内核模块问题再往下走。1.2 为什么选 Docker CE 而不是系统自带的 Podman先回答一个经常被问的问题RockyLinux 10 自带 podman为什么还要装 Docker我的判断是看场景。如果你只想跑几个简单容器不需要 Docker API不需要 docker compose 的完整生态那 podman 完全够用而且它和系统集成得更好不需要额外维护守护进程。但如果你要跑的是生产环境的业务应用或者需要兼容老的 CI/CD 脚本那 Docker CE 几乎还是事实标准。原因有三个一是 docker compose 的生态更完整是很多开源项目默认的部署方式二是 K8s、容器镜像构建链等周边工具默认对接 Docker CLI切换成本高三是团队里其他人熟悉的是 Docker 命令用 podman 虽然命令大部分兼容但细节上总有差异容易出问题。我自己在这批 RockyLinux 10 机器上选了 Docker CE理由很直接——这些机器要统一跑一套基于 docker compose 的微服务换成 podman 等于给自己找麻烦。如果你确实想试试 podman也不用卸载 Docker两者可以在同一台机器上共存但注意镜像存储和端口映射的冲突。我个人不建议在一台生产环境上同时并用排查问题的时候会很痛苦。1.3 安装环境的检查清单动手之前我会养成先做一轮系统预检的习惯。过程很快但能帮你避免后面反复踩坑。首先是系统更新dnf update -y。这一点不用多解释RockyLinux 10 刚发布时软件源里可能有部分组件版本不一致先更新到最新版本能减少依赖冲突的概率。其次是查看磁盘和分区情况lsblk和df -h。Docker 的数据目录默认在/var/lib/docker如果你的系统盘空间紧张最好先把数据盘挂载好后面我会讲怎么把 Docker 的数据目录迁移到独立分区。第三是检查 SELinux 状态sestatus。RockyLinux 默认是 Enforcing 模式Docker 在 Enforcing 下通常能正常工作但在某些涉及挂载和端口映射的场景下会碰壁。如果你对 SELinux 不熟悉不建议直接永久关闭可以临时放到 Permissive 模式先测确认是 SELinux 拦截之后再针对性处理。第四是防火墙状态systemctl status firewalld。Docker 安装之后会自己往 iptables 里写规则如果你又开了 firewalld两者在某些配置下会互相打架。不是说不能共存而是要理解它们的协作方式。这个坑我会在问题排查那部分详细展开。最后确认一下系统架构和内核版本uname -m和uname -r。这个主要是为了在拉镜像或者遇到内核相关报错的时候你能知道自己的基线是什么。2. 正式安装仓库配置与组件安装2.1 添加官方软件源的两种方式Docker 官方维护了一套独立的软件源RHEL 系列的系统都走同一个地址。在 RockyLinux 10 上推荐用dnf config-manager来添加命令是这样的dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo注意这里的路径是centos不是rockylinux。这是 Docker 官方仓库的策略RHEL 系发行版统一用 centos 路径RockyLinux 和 AlmaLinux 都复用这个仓库。添加完之后用dnf repolist确认一下仓库是不是正常显示。如果你看到类似 Errors during downloading metadata for repository 的提示多半是网络问题或者仓库地址访问不到等一会儿再试。第二种方式是手动写入 repo 文件。这个方法更直观也方便你之后调整仓库参数。直接新建/etc/yum.repos.d/docker-ce.repo内容如下[docker-ce-stable] nameDocker CE Stable - $basearch baseurlhttps://download.docker.com/linux/centos/$releasever/$basearch/stable enabled1 gpgcheck1 gpgkeyhttps://download.docker.com/linux/centos/gpg这里有个细节要提醒你$releasever变量在 RockyLinux 10 上可能会解析成10但 Docker 仓库的目录命名是基于 RHEL 版本的RockyLinux 10 对应的 RHEL 版本可能仍然是 centos/9 或者带有特殊路径。所以如果手动写 repo 文件之后dnf报 404很可能就是这个变量解析的问题。这就是为什么我更推荐用第一行的dnf config-manager方式因为官方脚本会处理好版本映射。2.2 安装 Docker 核心组件仓库准备好之后安装命令如下dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin这是当前官方推荐的最小安装集合。逐个说一下这些包是干什么的方便你按需取舍。docker-ce是 Docker 守护进程本体包含dockerd和完整的引擎实现。docker-ce-cli是客户端命令行工具就算你只在本机操作也建议装上因为大部分运维脚本依赖docker命令。containerd.io是容器运行时Docker 引擎通过它来真正创建和运行容器这个包是必须的。docker-buildx-plugin和docker-compose-plugin是额外功能插件。前者提供增强的镜像构建能力比如多平台构建后者提供原生的docker compose命令替代老的docker-compose。我建议这两个都装上因为现在很多项目默认用docker compose up -d来部署装了你就不用另外折腾。如果你确定不需要 compose 和 buildx可以只装前三个包但聊胜于无装齐了后面省事。2.3 解决 podman 和 buildah 的冲突问题前面提到过RockyLinux 10 自带 podman 和 buildah。执行上面那条安装命令时你可能会看到类似这样的报错package docker-ce-... conflicts with podman-... provided by baseos这个冲突的根因是 docker-ce 和 podman 在某些文件路径上存在重叠主要是/etc/containers/registries.conf或者/usr/bin/docker的链接文件。处理方法有两种。第一种是直接把 podman 相关的包删掉dnf remove -y podman podman-docker buildah删掉之后重新执行安装命令。第二种是用dnf swap一步到位dnf swap -y podman docker-cednf swap会自动移除 podman 并安装 docker-ce如果还需要其他包后面再补装。这里有个注意事项如果你只是dnf remove podmanpodman 之前拉取的镜像和容器数据都还在/var/lib/containers目录下不会自动清理。确认不需要之后可以手动删但一般也不用着急留着不碍事等确定不需要再清掉就行。另外有个小坑有些人在删 podman 的时候会连带把container-tools模块删掉导致系统里其他依赖这个模块的组件出问题。我建议先只移除冲突的包不要轻易dnf module remove container-tools除非你已经确认当前环境完全不需要。2.4 启动服务并验证安装结果安装完成之后先不要急着开服务先执行一下systemctl enable docker systemctl start dockerenable是设置开机自启start是立即启动。然后查看服务状态systemctl status docker看到active (running)就说明守护进程已经起来了。接下来验证一下 Docker 能不能真正工作docker version docker infodocker version会同时显示客户端和服务器版本如果服务器部分没有正常输出说明守护进程有问题。docker info能看到存储驱动、容器数量、镜像数量、数据目录等信息这是我后面排查问题时的第一手依据。最后跑一个最小的测试容器docker run hello-world如果你看到 Hello from Docker! 的提示说明整个链路已经通了。如果卡在下载镜像这一步大概率是你当前网络环境下访问 Docker Hub 不顺畅这也是正常的我下一节会讲怎么配置镜像加速。3. 环境配置让 Docker 真正适合生产3.1 磁盘与数据目录规划安装好 Docker 只是第一步真正维护起来最麻烦的是存储。Docker 默认把所有镜像、容器层、卷数据存在/var/lib/docker而这个目录默认在系统根分区下。如果你的系统盘只有几十 GB拉几个大镜像就把根分区塞满了这是生产环境最常见的事故之一。我一般建议在安装初期就规划好独立的数据盘。比如我这边有一台机器挂载了/data分区那我就在/data下创建一个docker目录然后把 Docker 的数据目录指过去。在/etc/docker/daemon.json里配置{ data-root: /data/docker }如果这个文件不存在就新建一个。配置文件改完之后必须重启 Docker 才会生效systemctl daemon-reload systemctl restart docker这里要特别强调一点如果你已经用老位置跑了一段时间里面有镜像和容器数据不能直接改>systemctl stop docker mv /var/lib/docker /data/docker systemctl start docker迁移之前最好用df -h确认一下目标分区有足够的空间。另外不要在 Docker 运行的时候对/var/lib/docker下的文件做手动增删它会缓存目录结构你手动改了它不知道等它自己扫描出变化就可能损坏容器元数据。3.2 镜像加速配置在国内的服务器上安装完 Docker 之后第一件事我建议是配镜像加速。很多人第一次执行docker run hello-world卡住就是因为默认连的 Docker Hub 在当前网络环境下访问不顺畅。镜像加速的配置同样放在/etc/docker/daemon.json里{ registry-mirrors: [ https://docker.1ms.run, https://docker.m.daocloud.io ] }注意我这里列出的地址会随着时间变化你要以实际可用的为准。最简单的办法是看你用的云厂商有没有提供容器镜像加速的专属地址一般控制台里可以直接找到。如果你自己维护了内部镜像仓库比如私有化的 Harbor也可以把内网仓库地址放在列表最前面这样拉取真正部署的镜像时会优先走内网速度更快也更安全。配置好之后记得重启 Docker 生效。重启完可以执行docker info | grep -A 5 Registry Mirrors确认加速地址已经生效。有一点要提醒镜像加速只能加速从镜像仓库拉取镜像的过程并不能解决所有网络问题。比如构建镜像时需要访问外部软件源或者容器运行时需要访问外部 API这些都不受镜像加速影响。3.3 日志、DNS 与网络参数配置Docker 默认的日志驱动是json-file如果不对日志大小做限制长时间运行的容器会把磁盘写满。我一般会在daemon.json里加上日志轮转配置{ log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 } }这个配置的含义是单个日志文件最大 100MB超过就滚动最多保留 3 个文件。对大多数业务容器来说这个量级足够了既方便排查问题又不会无限占盘。接下来是容器的 DNS 配置。Docker 默认会使用宿主机/etc/resolv.conf里的 DNS 设置但在某些网络环境下容器内解析域名会失败表现是容器里ping 8.8.8.8通、ping 域名不通。这个时候可以在daemon.json里指定容器默认 DNS{ dns: [223.5.5.5, 114.114.114.114] }这两个地址一个来自某云、一个来自某通信服务商都是国内常见的公共 DNS。如果你在内网有自建的 DNS 解析服务也可以指向内网地址这样还能顺便解析内网服务域名。还有一个容易被忽略的配置是bip也就是 Docker 网桥的网段。默认情况下 Docker 会创建docker0网桥使用172.17.0.0/16网段。如果你的内网正好用了这个网段或者多个 Docker 主机之间需要容器互通就得显式指定一个不冲突的网段{ bip: 10.90.0.1/24 }改完bip之后已有的容器网络可能不会自动切换建议先把项目 stop 掉再重启 Docker最后重新up。这件事最好在 Docker 刚装好的时候就规划好一旦跑了大量容器再改就要花时间梳理旧的网络配置了。完整的daemon.json配置实例{ data-root: /data/docker, registry-mirrors: [ https://docker.1ms.run, https://docker.m.daocloud.io ], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, dns: [223.5.5.5, 114.114.114.114], bip: 10.90.0.1/24, storage-driver: overlay2 }要注意daemon.json是严格的 JSON 格式多一个逗号、少一个引号都会导致 Docker 启动失败。改完之后最好先跑一下docker info有语法错误的话它会直接报出来比自己对着文件找半天高效得多。3.4 用户组与安全权限管理默认情况下只有 root 用户和 docker 组的用户能执行 docker 命令。每次操作都要sudo很麻烦一个比较常见的做法是把运维用户加入 docker 组usermod -aG docker 你的用户名执行完需要重新登录一次或者执行newgrp docker让组权限在当前会话里生效。验证方式docker version如果正常输出了服务器版本信息说明权限已经生效。不过这里必须说清楚docker 组的权限等价于 root。因为 docker CLI 本质上是通过守护进程执行特权操作加入 docker 组的用户可以随意挂载宿主机的目录可以执行特权容器可以读取宿主机的文件。所以生产环境上一定不要因为图省事把无关用户都塞进 docker 组。我的习惯是单独创建一个运维账号只让这个账号有 docker 组权限业务账号保持普通权限。4. 常见问题与排查实录4.1 服务启动失败先看日志再说我见过很多人在 Docker 启动失败时第一反应是卸载重装。其实大部分启动失败都是配置问题看日志就能解决。遇到systemctl start docker卡住或者直接 failed排查顺序是这样的第一看服务状态systemctl status docker第二看详细日志journalctl -u docker -n 50 --no-pager第三如果journalctl里看不出有效信息直接去/var/log/messages或者/var/log/daemon.log里查 dockerd 的报错。我遇到过最多的情况是daemon.json配置了无效的镜像加速地址或者 JSON 格式写错。症状很典型执行systemctl start docker没报错但过几秒服务自动退出docker info提示Cannot connect to the Docker daemon。看日志会看到类似invalid character x after object key这样的 JSON 解析错误。另外如果启用了之前的>chown root:root /data/docker chmod 711 /data/docker还有一种少见但确实会发生的问题系统盘满了。systemctl start docker会尝试初始化很多临时文件和目录磁盘不足时它会直接报no space left on device但有时候错误信息不直接显示磁盘问题而是显示各种奇怪的路径错误。所以磁盘空间不足永远在怀疑项列表里排前面。4.2 端口映射与防火墙firewalld 和 iptables 的纠缠容器端口映射是另一个高频问题。场景是容器起来了docker ps -a也没问题但你在宿主机上用浏览器访问映射出来的端口怎么都不通。这里面的核心逻辑是Docker 在启动容器时会自动往宿主机的 iptables 里写入 NAT 规则。正常情况下就算你没开 firewalldDocker 的端口映射也能工作。麻烦的是 firewalld 和 Docker 的规则在 FORWARD 链上可能互相冲突。最典型的问题有三个。第一个是net.ipv4.ip_forward没开启。Docker 做端口映射依赖内核转发功能。检查方法sysctl net.ipv4.ip_forward如果输出是0那肯定不通。临时开启echo 1 /proc/sys/net/ipv4/ip_forward永久开启编辑/etc/sysctl.conf加入net.ipv4.ip_forward 1然后执行sysctl -p。第二个是 firewalld 的默认策略把 FORWARD 链设置为 DROP导致 Docker 自带的转发规则被拦截。你可以检查当前的 FORWARD 策略iptables -L FORWARD -n如果发现默认策略是 DROP而 Docker 的链又没有放行访问就进不来。处理方式有两条路要么在 firewalld 里添加端口放行让流量能进来firewall-cmd --permanent --add-port8080/tcp firewall-cmd --reload要么把 firewalld 整体停用完全交给 Docker 自己管理网络。我自己倾向保留 firewalld、按需放行端口但如果你对 iptables 规则很熟悉直接交给 Docker 也完全可行。第三个是修改完防火墙规则后 Docker 没重启。Docker 的网络规则是在引擎启动和容器启动时写入的你手动改了防火墙规则之后Docker 不知道自然也不会帮你重新刷。所以遇到规则修改不生效的情况先重启一下 Docker 再验证。有个经验性的检查清单先curl 127.0.0.1:8080确认服务本身在容器里正常再检查宿主机上的映射有没有生效最后再考虑防火墙和外网的访问链路。按这个顺序排查能省掉很多无用工作。4.3 存储驱动与内核模块问题RockyLinux 10 默认使用的文件系统可能还是 xfsDocker 在这种情况下首选存储驱动是overlay2。绝大多数情况下没问题但一旦涉及底层块设备或者自定义内核就可能报这样或那样的错。最常见的报错是failed to mount overlay: operation not permitted或者是failed to create task for container: failed to mount ...。出现这种问题的排查方向第一个想到的是 overlay 内核模块没有加载。手动加载一下modprobe overlay modprobe br_netfilter如果模块存在但之后重启又会失效就把模块写进持久化配置。新建/etc/modules-load.d/docker.confoverlay br_netfilter另外一个 xfs 文件系统的特殊要求如果你想启用 Docker 的底层配额能力xfs 挂载必须开启pquota选项。这不是安装 Docker 的必要条件没有它 Docker 也能跑只是容器磁盘配额控制功能受限。检查当前挂载参数mount | grep pquota如果这个功能对你的业务很重要比如你要严格限制每个容器的磁盘占用那重新挂载 xfs 时记得加上mount -o remount,pquota /data还有一部分人遇到的是device mapper相关的老问题但这个在 RockyLinux 10 上已经非常罕见了如果看到devicemapper的字眼直接忽略优先确认overlay2。4.4 容器网络不通从 DNS 到网段冲突容器网络不通的原因很多我梳理一下最常见的几类。第一种表现容器可以访问内网但访问不了外网。检查顺序先看内核转发net.ipv4.ip_forward再看 Docker 是否正常运行了 NAT 链。如果是在公司内网环境还要排查是不是上层防火墙只放行了特定 IP 的流量容器出来的流量源 IP 变成了 docker0 网段被上层策略拦了。第二种表现容器能 ping 通 IP但解析不了域名。这个基本就是 DNS 问题用之前说的daemon.json里的dns字段配置就能解决。有个细节改完 DNS 配置重启 Docker 之后已经存在的容器需要重建才生效docker restart不一定会重新读取 DNS 配置。第三种表现宿主机访问不到容器 IP但容器之间能互相访问。这大概率是 iptables 的 FORWARD 策略或者 Docker 网络策略的问题。排查方式iptables -L -n -v重点看 FORWARD 链如果默认 DROP 且没有放行 Docker 网段的规则访问就会失败。第四种表现宿主机上的业务和 Docker 网段冲突。比如你内网本来就用了172.17.0.0/16Docker 默认的 docker0 网段正好撞上。确认方法ip addr show docker0如果和你内网网段冲突在daemon.json里用bip改掉这一步最好在部署大量容器之前完成否则后面改网段时一堆容器要重建。4.5 怎么干净地卸载 Docker最后讲一下卸载主要是给那些想从 podman 切到 Docker、或者换了新机器想重置环境的人一个参考。卸载分两个层面卸载软件包和清理数据。卸载软件包dnf remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin如果以后不想再装 Docker顺手把仓库也删掉rm -f /etc/yum.repos.d/docker-ce.repo清理数据目录rm -rf /var/lib/docker如果你之前自定义了>iptables -F iptables -t nat -F iptables -X但要注意这么操作会清掉你手动添加的所有防火墙规则只能在没有其他服务依赖这些规则的情况下执行。卸载的整个过程中最核心的一点是区分“卸载软件”和“清理数据”。如果你只是觉得 Docker 安装得有毛病想重装一遍那只需要卸载软件包、保留/var/lib/docker数据这样重新装好之后原来的镜像和容器数据都还在。如果你确认数据都不要了才做完整清理。我踩过一次坑只是想重装 Docker 解决一个网络问题结果手快把数据目录删了一堆旧镜像丢光还得从远端仓库重新拉。教训就是清理操作之前想清楚你到底要保留什么。结尾装 Docker 这件事本身不难真正花时间的往往是在装完之后适配你所在机器的具体环境。我自己在 RockyLinux 10 上这几台机器第一批装的时候跳过了镜像加速配置结果跑docker compose up -d的时候几个应用镜像拉了一半就卡住最后又回头补配等于走了弯路。后来我把daemon.json的完整配置模板固定下来新机器装完 Docker先写配置、再启动、再拉镜像就再没出过岔子。建议你也把这套流程固定成自己的初始化模板后面每次装新服务器都能少踩很多坑。

关于恒美微站

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

快速链接

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

服务项目

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

联系方式

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

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