无网络环境下如何在Docker容器内安装RPM包管理器及memcached RPM?
解决无网络环境下在dotnet 2.0 runtime容器中安装RPM包管理器及Memcached的问题
首先明确:完全可以在无网络环境下完成这个操作,核心思路是先在有网络的同架构机器上提前下载好RPM包管理器(对应Debian系的.deb格式安装包)及其所有依赖,然后将这些文件和Memcached的.rpm包一起复制到容器构建上下文,再逐步安装。
问题根源
你遇到的rpm: not found错误,是因为microsoft/dotnet:2.0-runtime镜像基于Debian系系统(而非CentOS),默认只预装了Debian的包管理器dpkg/apt,没有RPM工具。
具体操作步骤
1. 在有网络的同架构机器上下载RPM包管理器的依赖deb包
找一台和目标容器同架构(x86_64)的Debian/Ubuntu机器(或者直接用docker run启动microsoft/dotnet:2.0-runtime镜像并临时联网),执行以下命令下载rpm及其所有依赖的.deb文件:
# 先安装依赖查询工具(如果没装的话) apt-get update && apt-get install -y apt-rdepends # 创建目录存放deb包 mkdir rpm-deps && cd rpm-deps # 下载rpm及所有依赖的deb包 apt-rdepends rpm | grep -v "^ " | xargs apt-get download
执行完成后,rpm-deps目录下会有所有需要的.deb文件。
2. 整理构建上下文
将下载好的所有.deb文件,连同你的memcached-1.4.15-10.el7_3.1.x86_64.rpm一起放到mempkgtest文件夹中(也就是你之前的构建上下文目录)。
3. 修改Dockerfile
更新你的Dockerfile,先安装RPM包管理器,再安装Memcached的rpm包:
FROM microsoft/dotnet:2.0-runtime WORKDIR /home # mempkgtest目录包含rpm的deb依赖包和memcached的rpm包 COPY ${source:-mempkgtest} . # 安装rpm包管理器及其依赖 RUN dpkg -i ./*.deb # 安装memcached(如果memcached的rpm有额外依赖,需要提前下载对应rpm包并一起安装) RUN rpm -ivh /home/memcached-1.4.15-10.el7_3.1.x86_64.rpm ENTRYPOINT ["dotnet", "--info"]
额外注意事项
- Memcached的rpm依赖:如果Memcached的rpm包依赖其他系统库(比如
libevent),你需要同样在有网络的CentOS机器上下载这些依赖的.rpm包,放到mempkgtest中,然后修改最后一步的命令为:RUN rpm -ivh /home/libevent-*.rpm /home/memcached-1.4.15-10.el7_3.1.x86_64.rpm - 系统版本兼容:确保下载的
.deb包版本和microsoft/dotnet:2.0-runtime的基础系统版本一致(比如该镜像基于Debian 9 "Stretch",就对应下载Stretch源的deb包),避免依赖版本不匹配的问题。
内容的提问来源于stack exchange,提问作者ronilk
相关产品推荐
相关产品推荐

