Docker 稳定性保障:Ubuntu 环境版本锁定方案
发布时间 - 2025-06-25 00:00:00 点击率:次作为许多开发和生产环境中基础设施的重要组成部分,docker 的版本稳定性直接影响着整个系统的可靠性。本文将详细介绍如何有效地管理和固定 docker 的版本。
在开始之前,不得不提到 Docker 已经诞生了十二年。作为容器化技术的先驱,它已经成为众多开发者和企业的必备工具。然而,随着 Docker 的不断发展,频繁的版本更新也带来了不少问题。
许多开发者可能都曾遇到过这样的困境:之前运行良好的容器,在更新 Docker 版本后突然出现了各种奇怪的问题。这些问题可能是配置文件不兼容、命令参数变化,甚至影响到整个应用的稳定性。
更令人头疼的是,当试图解决这些问题时,网上搜索到的许多文章要么已经过时,要么就是简单地复制粘贴一些错误的或已经失效的命令。这不仅无法解决问题,还会浪费大量的时间。(在使用这些命令时,你是否考虑过它们的可靠性?)
基于这些原因,我决定撰写这篇文章,详细介绍如何在 Ubuntu 环境中有效地管理和固定 Docker 版本,帮助你避免版本更新带来的各种意外问题。
准备工作:Docker 安装如果你的系统中尚未安装 Docker,可以参考我之前写的《搭建 Ubuntu 24.04 基础开发环境指南》,文章中详细介绍了 Docker 的安装和基础配置步骤。
实战过程首先,我们需要找
出系统中已经安装的 Docker 相关包。
查找 Docker 依赖软件包我们可以使用 dpkg-query 命令来查询系统中已安装的软件包,并用 grep 筛选出 Docker 相关的内容:
# dpkg-query -l | grep docker ii docker-buildx-plugin 0.20.0-1~ubuntu.24.04~noble arm64 Docker Buildx cli plugin. ii docker-ce 5:27.5.1-1~ubuntu.24.04~noble arm64 Docker: the open-source application container engine ii docker-ce-cli 5:27.5.1-1~ubuntu.24.04~noble arm64 Docker CLI: the open-source application container engine ii docker-ce-rootless-extras 5:27.5.1-1~ubuntu.24.04~noble arm64 Rootless support for Docker. ii docker-compose-plugin 2.32.4-1~ubuntu.24.04~noble arm64 Docker Compose (V2) plugin for the Docker CLI. ii python3-docker 5.0.3-1ubuntu1.1 all Python 3 wrapper to access docker.io's control socket
为了避免手动复制粘贴可能带来的错误,我们可以使用 awk 命令来提取包名。使用命令获取软件包名还有一个好处,即在 docker 软件依赖发生变化后,相较于手动“复制粘贴”,使用命令可以自适应解决问题。
# dpkg-query -l | grep docker | awk '{print $2}'
docker-buildx-plugin
docker-ce
docker-ce-cli
docker-ce-rootless-extras
docker-compose-plugin
python3-docker日志中的结果就是 Docker 的主要程序组件依赖。不过,这只是处理了那些名字中明显包含 “docker” 关键词的包。接下来,我们还需要处理一些可能被遗漏的依赖包。
深入了解 Docker 软件包依赖关系在研究 Docker 的子依赖时,我们可以使用 apt-cache depends 结合 xargs 来进行分析。
首先,让我们看看如何获取相关软件包的依赖情况:
# dpkg-query -l | grep docker | awk '{print $2}' | xargs -I {} apt-cache depends {}
docker-buildx-plugin
Replaces: docker-ce-cli
Enhances: docker-ce-cli
docker-ce
Depends: containerd.io
Depends: docker-ce-cli
Depends: iptables
Depends: libseccomp2
Depends: libc6
Depends: libsystemd0
Conflicts:
Conflicts:
Conflicts: docker.io
Recommends: apparmor
Recommends: ca-certificates
Recommends: docker-ce-rootless-extras
Recommends: git
Recommends: kmod
Recommends: libltdl7
Recommends: pigz
Recommends: procps
Recommends: xz-utils
|Suggests: cgroupfs-mount
Suggests: cgroup-lite
Replaces:
docker-ce-cli
Depends: libc6
Conflicts:
Conflicts:
Conflicts: docker.io
Breaks: docker-ce
Recommends: docker-buildx-plugin
Recommends: docker-compose-plugin
Replaces: docker-ce
docker-ce-rootless-extras
Depends: dbus-user-session
Depends: libc6
Conflicts: rootlesskit
Breaks: rootlesskit
Recommends: slirp4netns
Replaces: rootlesskit
Enhances: docker-ce
docker-compose-plugin
Enhances: docker-ce-cli
python3-docker
Depends: python3-requests
Depends: python3-websocket
Depends:
python3
Depends: python3-packaging
Depends: python3-urllib3
Breaks: python3-minimal
这个命令会为我们展示详细的依赖信息,包括:
- 必需依赖(Depends)
- 推荐安装(Recommends)
- 冲突包(Conflicts)
- 替换包(Replaces)
考虑到我们主要关注稳定环境下的版本控制和简化维护工作,我们本身不会强制安装古早的淘汰软件包,也不会强制安装冲突软件包。所以,重点应该放在 Depends 和 Recommends 这两类依赖上。我们可以这样继续筛选:
# dpkg-query -l | grep docker | awk '{print $2}' | xargs -I {} apt-cache depends {} | grep -E "Depends|Recommends"
Depends: containerd.io
Depends: docker-ce-cli
Depends: iptables
Depends: libseccomp2
Depends: libc6
Depends: libsystemd0
Recommends: apparmor
Recommends: ca-certificates
Recommends: docker-ce-rootless-extras
Recommends: git
Recommends: kmod
Recommends: libltdl7
Recommends: pigz
Recommends: procps
Recommends: xz-utils
Depends: libc6
Recommends: docker-buildx-plugin
Recommends: docker-compose-plugin
Depends: dbus-user-session
Depends: libc6
Recommends: slirp4netns
Depends: python3-requests
Depends: python3-websocket
Depends:
Depends: python3-packaging
Depends: python3-urllib3
我们从输出结果中,能够看到非常清晰的依赖关系,其中主要包括:
- 基础组件:containerd.io、iptables、libseccomp2
- 系统库:libc6、libsystemd0
- 工具包:docker-ce-cli、docker-buildx-plugin
- 安全相关:apparmor、ca-certificates
- 其他工具:git、kmod、pigz、procps
其中一个依赖支持“任意版本的 Python 软件包”,所以在后续处理过程中,我们可以将这个依赖项去掉。
为了让结果更清晰易读,我们可以用 sed 来继续优化输出格式,只保留包名:
dpkg-query -l | grep docker | awk '{print $2}' | xargs -I {} apt-cache depends {} | grep -E "Depends|Recommends" | grep -v ":any" | sed 's/^[[:space:]]*\(Depends\|Recommends\): //'
containerd.io
docker-ce-cli
iptables
libseccomp2
libc6
libsystemd0
apparmor
ca-certificates
docker-ce-rootless-extras
git
kmod
libltdl7
pigz
procps
xz-utils
libc6
docker-buildx-plugin
docker-compose-plugin
dbus-user-session
libc6
slirp4netns
python3-requests
python3-websocket
python3-packaging
python3-urllib3这样就得到了一个简洁的 Docker 核心依赖列表,对于我们理解当前版本的 Docker 的组件构成和进行环境配置都很有帮助。
编写软件包获取脚本程序有了前面的经验,我们可以写一个更完整的脚本,来获取所有软件包的依赖列表。这对我们后续锁定特定软件包会很有帮助。
#!/bin/bash
# 创建临时文件存储所有依赖
temp_file=$(mktemp)
# 获取所有 docker 相关包的依赖
dpkg-query -l | grep docker | awk '{print $2}' | while read pkg; do
echo "=== Dependencies for $pkg ===" >> "$temp_file"
apt-cache depends "$pkg" | grep -E "Depends:|Recommends:" | \
grep -v "> " >> "$temp_file"
echo >> "$temp_file"
done
# 显示所有依赖(带包名标题)
cat "$temp_file"
echo -e "\n=== Unique dependencies (sorted) ==="
# 提取唯一的依赖项并排序
grep -v "^===" "$temp_file" | \
grep -v "^$" | \
sort -u
# 清理临时文件
rm "$temp_file"我们将这个脚本保存为 get_docker_dependencies.sh,并运行它:
./get_docker_dependencies.sh
这样,我们就能够得到一个完整的 Docker 依赖列表,并且可以根据需要进行版本锁定。
# docker
# python
# git
# access
# 工具
# ai
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
如何解决hover在ie6中的兼容性问题
Bootstrap CSS布局之列表
如何在阿里云服务器自主搭建网站?
Laravel如何实现模型的全局作用域?(Global Scope示例)
香港服务器部署网站为何提示未备案?
高端企业智能建站程序:SEO优化与响应式模板定制开发
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
详解jQuery中基本的动画方法
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
高防服务器租用如何选择配置与防御等级?
活动邀请函制作网站有哪些,活动邀请函文案?
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
如何快速使用云服务器搭建个人网站?
如何登录建站主机?访问步骤全解析
Laravel如何使用withoutEvents方法临时禁用模型事件
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
如何快速搭建高效WAP手机网站?
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
如何在Tomcat中配置并部署网站项目?
重庆市网站制作公司,重庆招聘网站哪个好?
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Mybatis 中的insertOrUpdate操作
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何在局域网内绑定自建网站域名?
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
C++用Dijkstra(迪杰斯特拉)算法求最短路径
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
C语言设计一个闪闪的圣诞树
微信小程序 wx.uploadFile无法上传解决办法
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
javascript中对象的定义、使用以及对象和原型链操作小结
如何实现建站之星域名转发设置?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何续费美橙建站之星域名及服务?
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel如何创建自定义Facades?(详细步骤)
使用C语言编写圣诞表白程序
如何在万网利用已有域名快速建站?
开心动漫网站制作软件下载,十分开心动画为何停播?
网站制作软件有哪些,制图软件有哪些?

