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