0

0

Docker 稳定性保障:Ubuntu 环境版本锁定方案

星夢妙者

星夢妙者

发布时间:2025-06-25 12:20:01

|

919人浏览过

|

来源于php中文网

原创

作为许多开发和生产环境中基础设施的重要组成部分,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 来进行分析。

首先,让我们看看如何获取相关软件包的依赖情况:

Leewow
Leewow

全球首个AI造物智能体

下载
# 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: <docker>
  Conflicts: <docker-engine>
  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-engine>
docker-ce-cli
  Depends: libc6
  Conflicts: <docker>
  Conflicts: <docker-engine>
  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: <any>
    python3
  Depends: python3-packaging
  Depends: python3-urllib3
  Breaks: python3-minimal
</any>
</docker-engine>
</docker>
</docker-engine>
</docker-engine>
</docker>

这个命令会为我们展示详细的依赖信息,包括:

  • 必需依赖(Depends)
  • 推荐安装(Recommends)
  • 冲突包(Conflicts)
  • 替换包(Replaces)

考虑到我们主要关注稳定环境下的版本控制和简化维护工作,我们本身不会强制安装古早的淘汰软件包,也不会强制安装冲突软件包。所以,重点应该放在 DependsRecommends 这两类依赖上。我们可以这样继续筛选:

# 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: <any>
  Depends: python3-packaging
  Depends: python3-urllib3
</any>

我们从输出结果中,能够看到非常清晰的依赖关系,其中主要包括:

  • 基础组件: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 稳定性保障:Ubuntu 环境版本锁定方案

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

958

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

578

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

275

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

567

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

532

2024.04.09

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

280

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

515

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

416

2024.04.08

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
光速学会docker容器
光速学会docker容器

共33课时 | 2万人学习

Docker 17 中文开发手册
Docker 17 中文开发手册

共0课时 | 0人学习

极客学院Docker视频教程
极客学院Docker视频教程

共33课时 | 18万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号