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

时间:2018-08-28 23:44:08

标签: dockerfile apt-get

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

1 个答案:

答案 0 :(得分:0)

apt-get的手册页中:

  

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

您可以尝试在docker映像上运行apt-get install而不运行update,但是您可能会发现很多事情将由于软件包索引已过期而无法安装。

更新软件包数据后,您可以在运行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!