如何在“docker构build”期间路由到docker集装箱中的主机

TL; DR
我的Dockerfile有一个RUN步骤,执行一个从生成服务器下载构build的shell脚本。 我希望这个构build服务器在我的docker主机上进行快速传输。 如果可能的话,我怎样才能让docker build命令的容器转到我的主机(当然不用上网)?

细节
我有一个相当大的代码库(> 500MB),我想要在docker容器中运行。 因为回购是如此之大,使用ADD指令来升级代码不仅花费了大量的时间,而且在我的Docker容器中占用了更多空间(我经常构build的空间限制是一个问题)。 我对这个问题的解决方法是:

  • 从已经有我的代码回购阶段的基本图像拉
  • 利用RUN步骤执行一个shell脚本,将最新的代码作为压缩包下载,解压缩,并将内容rsyncs到已经登台的repo

我的Dockerfile看起来像这样:

 FROM my.image.server.com/base/image:latest ADD build.sh /tmp/build.sh RUN cd /tmp && bash ./build.sh && rm -f build.sh 

build.sh看起来像这样:

 #!/bin/bash # Start from a clean state rm -rf ./tmp/repo mkdir -p ./tmp/repo # Download my tar'd repo wget http://my.build.server.com/repo.tar wget http://my.build.server.com/repo.tar.sha1 shasum -C repo.tar.sha1 tar -xf repo -C ./tmp/repo # Stage changed code; /opt/repo is where the code lives in my base image rsync -a --delete ./tmp/repo /opt/repo # Clean up so my image is as small as possible rm -rf repo.tar* rm -rf ./tmp/website 

这对于保持我的图像很小,并且加快docker build步骤也很有效。 不过,我想通过在本地下载tarball(即从我的docker主机上运行的文件服务器)来加快速度。 不幸的是, docker build步骤无法路由到我的主机。

我知道有可能转发端口从主机到容器和桥接主机到容器,当旋转容器(即docker run ),但一直没有能够find任何文件如何从docker容器到主机在docker build 。 这可能吗? 如果是这样,我怎么能做到这一点?

我不认为有一个漂亮的方式来访问主机在构build过程中,但它是可访问的:使用ifconfig或类似的查看您的主机的IP地址。

例如,我的en0目前有地址10.0.1.17 (私有子网)。 如果你的文件服务器正在监听那个接口,那么你的build.sh会说

 wget http://10.0.1.17/repo.tar 

这个问题当然是,你不能把这个Dockerfile给别人,除非你想让他们和你的文件服务器通信,如果你使用DHCP,你的IP将会改变。 你可以做一些其他的事情,比如添加你自己的networking接口。