我正在尝试使用以下命令将 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/*