简单说明

之前为了实现交叉编译,在x86的虚拟机上搭建了arm 64的docker环境,具体搭建流程见史上较全docker镜像制作流程(有基础镜像,非docker build),在其中也遇到了一些坑,也简单做了笔记https://blog.csdn.net/qq_29935433/article/details/104805275踩完上面的坑后,以为就可以开始美滋滋的使用了。

然而事情并没有那么简单,在进行arm64的Ubuntu16.04环境的搭建的时候一直报错,然后开始排查,后面才排查到docker环境已经从最初的Ubuntu16.04升级到Ubuntu18.04了。真的一口老血喷出来。

环境说明

主机环境:windows10专业版

虚拟机环境:16.04.1-Ubuntu

Docker version: 19.03.7, build 7141c199a2

懵逼操作

在初学linux的时候,就学了在安装完Ubuntu系统后第一步操作就是运行以下两条命令

apt-get update
apt-get upgrade

其中update 是同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。update是下载源里面的metadata的. 包括这个源有什么包, 每个包什么版本之类的。

至于upgrade,则是对已安装的软件包本身进行更新的过程。由于确定要更新的软件包需要对本地安装的版本和列表的版本进行比较,所以一般在update后要运行upgrade。

要求执行update与upgrade,实际上是确保本地软件列表信息和已安装软件均为最新的过程。这样可以最大限度的确保新安装的软件包正常工作。之前也一直是这么做的,并没有发现有什么问题。

在排查问题的时候,发现docker环境被升级,就决定从镜像重新创建容器,按照步骤一步一步来进行排查。每运行一步就查看一下系统版本。结果在运行apt-get upgrade的时候就发现了这个让人懵逼的问题——系统直接升级了。

初始系统版本

运行apt-get upgrade

在这里插入图片描述

再次查看系统版本

总结

尚不清楚为什么在docker内运行apt-get upgrade就能直接将系统从Ubuntu16.04干到Ubuntu18.04。

get upgrade就能直接将系统从Ubuntu16.04干到Ubuntu18.04。

但是,吃一堑长一智,在平时不安装软件,以及安装软件没有报404问题的时候,服务器系统没有安全性更新就别乱更新了,稳定最重要。

补充(解决方案)

后面发现,如果不运行apt-get upgrade的话,docker环境始终有问题,缺少各种依赖。

所以问题变成了必须要运行apt-get upgrade,但不能让系统升级,解决方法如下:

#在运行apt-get upgrade前先运行下面这条指令阻止系统更新
sudo apt-mark hold linux-image-generic linux-headers-generic

如果你需要系统更新了,或者需要更新内核,请运行下面的命令接触阻止:

sudo apt-mark unhold linux-image-generic linux-headers-generic
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐