【发布时间】:2017-05-08 18:55:14
【问题描述】:
在我的 centos7 主机上,我编写了一个 Dockerfile 来构建基于 centos7:latest 的镜像。 同样在我的centos7主机上,有一个本地yumrepo文件夹,有很多RPM需要安装到docker镜像,总大小约为1GB。
在我的 Dockerfile 中,我需要将 repo url 写入 /etc/yum.repos.d/local.yum,例如:baseurl=file://home/local_yumrepo/。 然后运行“yum -y install 1.rpm 2.rpm...” 但 dockerfile 无法访问主机文件夹。
我在 google 上搜索,发现有人说 docker build 支持“-v HOST_VOLUME:CONTAINER_VOLUME”,但如果我添加“-v”选项,docker build 会返回错误,而“docker build”的 official guide 不会t 支持“-v”选项
我可以在我的主机文件夹上运行“python -m HttpServer”,然后我可以将 baseurl=http://HOST_IP:8000/local_repo 写入 /etc/yum.repos.d/local.yum,然后 Dockerfile 可以访问该服务器并安装RPM,但我不想采取这种方式,因为多用户正在使用这台主机,如果一个人在8000端口上运行httpserver,其他人无法再次运行。我希望每个人都独立运行 docker build。
我也可以运行“COPY HOST_LOCAL_REPO CONTAINER_VOLUME”,然后将 /etc/yum.repos.d/local.yum 写为 baseurl=file://CONTAINER_VOLUME/,然后 docker build 可以正确安装 RPM。但这会使我的 Docker 映像大小太大,甚至在 Dockerfile 末尾的容器卷上“rm -rf”。大尺寸是不能接受的
RPM 相互依赖,即使我只是 yum install 1.rpm,它也不是 111.rpm 112.rpm 113.rpm....,所以我不知道我真正需要什么 rpm ,但我确信所有的 rpm 文件都在本地 repo 文件夹中。
我的问题是:Dockerfile 中有没有办法可以使用 file:// 协议运行“yum install host_repo_url”?
谢谢
【问题讨论】:
-
PS,如果我将docker安装为“yum install docker”,版本是1.10,但是如果我按照官方指南做“yum install docker-engine”,版本是1.12.5版本:1.12 .5 API 版本:1.24 Go 版本:go1.6.4 Git 提交:7392c3b 构建:2016 年 12 月 16 日星期五 02:23:59 OS/Arch:linux/amd64 服务器:版本:1.12.5 API 版本:1.24 Go 版本:go1。 6.4 Git 提交:7392c3b 内置:2016 年 12 月 16 日星期五 02:23:59 操作系统/Arch:linux/amd64
标签: docker containers