如何在“docker build”期间路由到docker容器中的主机

时间:2015-03-10 00:16:15

标签: routing docker containers host

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

详情
我有一个相当大的代码存储库(> 500MB),我想在docker容器中暂存和运行。因为repo是如此之大,使用ADD指令暂存代码不仅需要花费大量时间,而且还占用了我的docker容器中比我更喜欢的空间(我经常建立足够的空间)空间限制是一个问题)。我对这个问题的解决方案是:

  • 从已经拥有我的代码仓库的基础图片中拉出
  • 使用执行shell脚本的RUN步骤,该脚本将最新代码作为tarball下载,解压缩,并将内容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容器无法路由到我的主机。

我知道可以在启动容器时将端口从主机转发到容器并将主机桥接到容器(即docker run),但是我们无法找到有关如何路由的任何文档在docker build期间从docker容器到主机。这可能吗?如果是这样,我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为在构建期间访问主机的方式非常简单,但可以访问:使用ifconfig或类似内容查看主机的IP地址。

例如,我的en0目前有地址10.0.1.17(私有子网)。如果您的文件服务器正在侦听该接口,那么您的build.sh可以说

wget http://10.0.1.17/repo.tar

问题当然是,除非您希望他们与您的文件服务器通信,否则您无法将此Docker文件提供给其他人,如果您使用的是DHCP,那么IP将改变。你可以做一些其他事情来解决这个问题,比如添加自己的网络接口。