【问题标题】:How to route to host in docker container during 'docker build'如何在“docker build”期间路由到 docker 容器中的主机
【发布时间】:2015-05-11 07:42:30
【问题描述】:

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

详情
我有一个相当大的代码存储库(>500MB),我想在 docker 容器中暂存和运行。因为 repo 太大了,使用 ADD 指令暂存代码不仅需要大量时间,而且在我的 docker 容器中占用的空间比我想要的要多得多(我构建的频率足够高,空间限制是一个问题)。我对这个问题的解决方案是:

  • 从已经暂存了我的代码仓库的基础镜像中提取
  • 利用RUN 步骤执行shell 脚本,该脚本将最新代码下载为tarball,解压缩,并将内容rsync 到已暂存的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 容器路由到在docker build 期间主持。这可能吗?如果是这样,我该如何做到这一点?

【问题讨论】:

    标签: routing docker containers host


    【解决方案1】:

    我认为在构建过程中访问主机并没有什么好方法,但它是可以访问的:使用ifconfig 或类似的方式查看主机的 IP 地址。

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

    wget http://10.0.1.17/repo.tar
    

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

    【讨论】:

    • 太棒了。我没有意识到容器会路由到主机上的任何接口。为此目的在主机上创建一个虚拟接口就像一个魅力。对于它的价值,我并不关心 Dockerfile 的可移植性,因为它会存在并由 API 控制,开发人员可以发布到其端点以创建构建和部署。
    • 如果您希望将来保持 Dockerfile 的可移植性,您可以使用多个 COPY 命令在 Dockerfile 末尾复制最频繁更改的文件/目录。这样,构建映像就不会每次都复制所有文件。见Dockerfile Best Practices
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多