为什么这个 apt-get 命令在一个上下文中起作用,但在另一个上下文中却不起作用?

为什么这个 apt-get 命令在一个上下文中起作用,但在另一个上下文中却不起作用?

我正在尝试使用以下命令将 plpython 包添加到我的 docker 容器(运行 Ubunutu 映像)(RUN 是 docker 命令,如果您不了解 Docker,可以忽略它):

RUN apt-get install -y postgresql-plpython-$PG_MAJOR=$PG_VERSION

然而这会出现以下错误:

E: Unable to locate package postgresql-plpython-9.4
E: Couldn't find any package by regex 'postgresql-plpython-9.4'
INFO[0005] The command [/bin/sh -c apt-get install -y postgresql-plpython-$PG_MA
JOR=$PG_VERSION] returned a non-zero code: 100

但是如果我将同样的命令插入到这是现有 Dockerfile 的一部分(即我添加行postgresql-plpython-$PG_MAJOR=$PG_VERSION \,该命令起作用。

我对 apt-get 不太了解,所以有人能解释一下为什么在父 Dockerfile 的上下文中可以找到该包,但在我的 Dockerfile 中却找不到吗?我该怎么做才能找到该包?

答案1

基础镜像的Dockerfile有如下指令:

rm -rf /var/lib/apt/lists/*

这会清除下载的软件包列表apt-get update。这就是您收到错误的原因。要解决此问题,请apt-get update在 Dockerfile 中再次执行。

答案2

确保捆绑了更新和安装命令。请参阅官方Docker 文档就此事而言。Docker 存在各种与缓存层失效有关的问题,否则可能会引发错误。

RUN apt-get update && apt-get install postgresql-plpython-$PG_MAJOR=$PG_VERSION

您还可以静默安装输出,并清理 apt 缓存以最小化图像和缓存大小。

RUN apt-get update -qqy \
 && apt-get install -qqy \
 postgresql-plpython-$PG_MAJOR=$PG_VERSION \
 && rm -rf /var/lib/apt/lists/* /var/cache/apt/*

相关内容