【问题标题】:docker build access host folderdocker build 访问主机文件夹
【发布时间】: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 无法访问主机文件夹。

  1. 我在 google 上搜索,发现有人说 docker build 支持“-v HOST_VOLUME:CONTAINER_VOLUME”,但如果我添加“-v”选项,docker build 会返回错误,而“docker build”的 official guide 不会t 支持“-v”选项

  2. 我可以在我的主机文件夹上运行“python -m HttpServer”,然后我可以将 baseurl=http://HOST_IP:8000/local_repo 写入 /etc/yum.repos.d/local.yum,然后 Dockerfile 可以访问该服务器并安装RPM,但我不想采取这种方式,因为多用户正在使用这台主机,如果一个人在8000端口上运行httpserver,其他人无法再次运行。我希望每个人都独立运行 docker build。

  3. 我也可以运行“COPY HOST_LOCAL_REPO CONTAINER_VOLUME”,然后将 /etc/yum.repos.d/local.yum 写为 baseurl=file://CONTAINER_VOLUME/,然后 docker build 可以正确安装 RPM。但这会使我的 Docker 映像大小太大,甚至在 Dockerfile 末尾的容器卷上“rm -rf”。大尺寸是不能接受的

  4. 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


【解决方案1】:

看起来您可能希望在某个随机端口上运行您的 python HTTP 服务器,并将--build-arg 中的端口号传递给docker build。选择随机端口可以很容易地封装在 shell 脚本中。

请注意,您至少需要 Docker 1.9 才能使用--build-arg

【讨论】:

  • 感谢您的 cmets。其实我不想使用 HTTP 服务器方式,
  • 感谢您的 cmets。我可以获取随机端口并将端口传递给 docker build 命令,但实际上我不想使用 HTTP 服务器方式。我更喜欢 docker build 可以访问主机文件夹,就像“docker run -v”选项一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
相关资源
最近更新 更多