dockerfile中的apt-get update会破坏应用程序的一致性?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (546)

在我看过的dockerfiles中,以及编写docker文件的最佳实践:https://docs.docker.com/engine/reference/builder/#copy ,当apt-get用于安装某些软件包时,apt-get update总是先运行。我对此感到担忧,因为我们在相应的docker容器中构建的应用程序将依赖于这些已安装的软件包,如果最新版本的软件包中存在一些不一致,我们构建的软件将无法正常工作。为什么我们不指定包的版本,而是使用apt-get update

提问于
用户回答回答于

从手册页apt-get

update用于从其源中重新同步包索引文件。可用包的索引是从/etc/apt/sources.list中指定的位置获取的。例如,使用Debian存档时,此命令将检索并扫描Packages.gz文件,以便可以获得有关新软件包和更新软件包的信息。应始终在升级或dist-upgrade之前执行更新。请注意,由于无法事先知道包文件的大小,因此整体进度表将不正确。

您可以尝试在apt-get install不运行updatedocker镜像的情况下运行,但是您可能会发现很多东西都无法安装,因为包索引已经过时了。

一旦你更新数据包,那么你就可以在运行指定程序包的特定版本install

apt update && apt install -y \
    git=1:2.7.4-0ubuntu1.4

docker容器的示例:

> sudo docker run -it ubuntu:16.04 /bin/bash
# root@513eb786d86d:/# apt install git
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package git
root@513eb786d86d:/# apt install git=1:2.7.4-0ubuntu1.4
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package git
root@513eb786d86d:/# apt update
...
root@513eb786d86d:/# apt install git=1:2.7.4-0ubuntu1.4
# works this time!

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动