需要在没有互联网连接的 docker 容器内安装 rpm 包

Need to install rpm package inside docker container without internet connectivity

我有一台没有互联网连接且无法访问任何 docker 存储库的机器(因此无法提取图像)。我想安装 memcached 并且我有可用的 .rpm 文件。

当我想在主机上安装时,我执行命令 rpm -ivh memcached-1.4.15-10.el7_3.1.x86_64.rpm 。但我想那是因为 rpm 包管理器预装在主机上 OS.

在 docker 容器中加载 .rpm 文件,在 docker 文件中包含命令 RUN rpm -ivh memcached-1.4.15-10.el7_3.1.x86_64.rpm。之后我收到以下错误:

/bin/sh: 1: rpm: not found The command '/bin/sh -c rpm -ivh /home/memcached-1.4.15-10.el7_3.1.x86_64.rpm' returned a non-zero code: 127

我想那是因为在 docker 容器中,OS 具有最低限度的安装。那么如何在没有互联网连接的情况下在容器内安装 rpm 包管理器呢?是否有可安装的文件。

我了解使用图像中央存储库不是最佳做法。想知道是否可以在没有互联网的情况下安装?

我现在正在 CentOS 机器上创建容器。以下是 docker 文件:

FROM microsoft/dotnet:2.0-runtime

WORKDIR /home
#mempkgtest folder contains the .rpm file
COPY ${source:-mempkgtest} .

RUN rpm -ivh /home/memcached-1.4.15-10.el7_3.1.x86_64.rpm

ENTRYPOINT ["dotnet", "--info"]

Docker 图像 microsoft/dotnet 构建在 buildpack-deps:jessie-scm 之上(来自 here) which is build on top debian:jessie (from here and here)。

debian 不使用 rpm package manager, it uses deb format for packages. /bin/sh kindly informs you, that is hasn't found rpm manager by saying /bin/sh: 1: rpm: not found. You can read how to install rpm packages on debian here.

无论如何,你为什么不使用 deb 文件和 dpkg 包管理器?你可以找到 debian jessie here 的 memcached pacakge。你可以在你的 docker 文件中做这样的事情:

ADD http://ftp.us.debian.org/debian/pool/main/m/memcached/memcached_1.4.21-1.1+deb8u1_amd64.deb
RUN dpkg -i memcached_1.4.21-1.1+deb8u1_amd64.deb

请记住,您还需要复制依赖项。

为什么不在 可以访问互联网 的机器上制作 docker 图片,而不是导出 docker 图像使用 docker export 然后 复制并导入 它在你的 目标 机器上?这种方式 更简单 并且 apt-get 将为您解析并安装所有 memcached 依赖项。