要防止 docker 自动升级,需用系统包管理器锁定版本:centos/rhel/fedora 用 yum/dnf versionlock 插件锁定具体 rpm 包,ubuntu/debian 用 apt-mark hold 锁定 deb 包,并建议结合 exclude 配置与定期安全评估。

要防止 Docker 自动升级,核心是利用系统包管理器的版本锁定机制——在 CentOS/RHEL/Fedora 等使用 yum 或 dnf 的系统中,用 versionlock 插件;在 Ubuntu/Debian 等使用 apt 的系统中,用 apt-mark hold。两者都能有效阻止 Docker 相关包被 upgrade 或 dist-upgrade 操作更新。
CentOS/RHEL/Fedora:用 yum/dnf versionlock 锁定 Docker 版本
该方法适用于已安装 docker-ce、docker-ce-cli、containerd.io 等 RPM 包的环境。
- 确认插件已启用:
yum-plugin-versionlock(yum)或dnf-command(versionlock)(dnf)需已安装。未安装则运行:sudo yum install -y yum-plugin-versionlock(CentOS 7)
或sudo dnf install -y 'dnf-command(versionlock)'(RHEL 8+/Fedora) - 查看当前安装的 Docker 包及精确版本:
rpm -qa | grep docker
典型输出如:docker-ce-27.5.1-1.el8.x86_64、docker-ce-cli-27.5.1-1.el8.x86_64 - 逐个锁定关键组件(推荐锁定完整版本号,避免通配符误锁):
sudo yum versionlock add docker-ce-27.5.1-1.el8.x86_64sudo yum versionlock add docker-ce-cli-27.5.1-1.el8.x86_64sudo yum versionlock add containerd.io-1.7.27-1.el8.x86_64 - 验证锁定结果:
yum versionlock list(或dnf versionlock list),确认对应条目已存在
Ubuntu/Debian:用 apt-mark hold 锁定 Docker 包
此方式简单直接,对 apt upgrade 和 apt full-upgrade 均生效,适用于 docker-ce、docker-ce-cli、containerd.io 等 DEB 包。
- 先查清已安装的 Docker 相关包名:
dpkg -l | grep docker
常见包名包括:docker-ce、docker-ce-cli、containerd.io、docker-compose-plugin - 对每个包执行锁定:
sudo apt-mark hold docker-ce docker-ce-cli containerd.io
(可一次指定多个包名) - 确认锁定状态:
apt-mark showhold—— 输出中应包含上述包名 - 后续若需升级,必须先解除锁定:
sudo apt-mark unhold docker-ce
补充建议:避免依赖绕过与安全风险
单纯锁定可能被间接升级绕过(例如通过依赖包触发更新),也会影响安全补丁获取。因此还需注意:
- 锁定后定期检查:
用apt list --upgradable(Debian)或dnf list updates(RHEL)确认 Docker 包确实未出现在待升级列表中 - 排除法增强控制(可选):
在/etc/yum.conf(RHEL)中添加:exclude=docker-ce docker-ce-cli containerd.io
或在/etc/apt/preferences.d/docker-pin(Ubuntu)中配置 APT Pinning,设置高优先级固定版本 - 生产环境建议:
仅锁定已充分测试的稳定版本;每季度评估一次是否仍需锁定,尤其关注 CVE 公告——必要时手动升级并重新锁定新版本











