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

时间:2018-05-30 13:12:39

标签: linux docker rpm

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

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

在docker容器中我加载.rpm文件,在dockerfile中我包含命令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容器中,操作系统只有最低限度的安装。那么如何在没有互联网连接的情况下在容器内安装rpm包管理器?是否有可安装的文件。

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

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

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"]

1 个答案:

答案 0 :(得分:3)

Docker镜像microsoft / dotnet构建于buildpack-deps之上:jessie-scm(来自here),它构建于top debian:jessie(来自herehere) 。

debian不使用rpm包管理器,它使用deb格式的包。 / bin / sh告诉你,通过说/bin/sh: 1: rpm: not found找不到rpm管理员。您可以阅读如何在debian here上安装rpm软件包。

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

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 export导出码头图像,然后复制,在机器上进行互联网访问,使码头图像并在目标计算机上导入它?这种方式更简单apt-get将解析并安装所有memcached依赖项。