首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Docker映像中安装DVD存储库中的软件包

在Docker映像中安装DVD存储库中的软件包
EN

Stack Overflow用户
提问于 2018-09-03 22:36:51
回答 1查看 1.2K关注 0票数 0

我正在尝试构建一个Docker镜像,它需要从DVD iso安装一些包,但我无法将iso挂载到容器中。

我的Dockerfile是:

FROM registry.access.redhat.com/rhscl/devtoolset-7-toolchain-rhel7:latest
USER root
WORKDIR /home

COPY tools.iso ./
COPY tools.repo /etc/yum.repos.d/
RUN mkdir /mnt/tools && \
    mount -r ./tools.iso /mnt/tools && \
    yum -y install make && \
    umount /mnt/tools && \
    rm tools.iso
CMD /bin/bash

当我运行docker build时,它返回以下错误:

 mount: /home/tools.iso: failed to setup loop device: No such file or directory

我还试图在安装iso之前添加命令modprobe loop,但日志显示它返回了code=1。

这是在Docker中从DVD安装包的正确方式吗?

EN

回答 1

Stack Overflow用户

发布于 2018-09-04 07:55:54

一般来说,Docker容器不能访问主机设备,也不应该挂载额外的文件系统。在docker build序列期间,这些限制甚至更严格,因为您不能使用各种选项来规避它。

最直接的选择是编写一个包装器脚本,为您执行挂载和卸载,如下所示:

#!/bin/sh
if [ ! -d tools ]; then mkdir tools; fi
mount -r tools.iso tools
docker build "$@" .
umount tools

然后,您可以拥有一个包含两个阶段的Docker映像,其中第一个阶段可以访问整个DVD内容并运行其安装程序,而第二个阶段实际上构建了您想要运行的映像。它看起来就像(完全是假设的)

FROM registry.access.redhat.com/rhscl/devtoolset-7-toolchain-rhel7:latest AS install
COPY tools tools
RUN cd tools && ./install.sh /opt/whatever

FROM registry.access.redhat.com/rhscl/devtoolset-7-toolchain-rhel7:latest
COPY --from=install /opt/whatever /opt
EXPOSE 8888
CMD ["/opt/whatever/bin/whateverd", "--bind", "0.0.0.0:8888", "--foreground"]

这样做的明显问题是,作为docker build序列的一部分,DVD的全部内容将通过网络通道从主机发送到它自己,然后在COPY步骤期间再次复制;如果它确实进入千兆字节范围,那么这将开始变得笨拙。您可以使用.dockerignore文件来隐藏其中的一些文件,以稍微加快速度。

根据软件是什么,您还应该考虑它是否可以在Docker容器中成功运行(它是否期望以相当严格的通信模式运行多个服务?);虚拟机可能被证明是更好的部署选项,而“将DVD挂载到VM”是一个定义更好的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52151842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档