gpt4 book ai didi

routing - 如何在 'docker build' 期间路由到 docker 容器中的主机

转载 作者:行者123 更新时间:2023-12-02 18:33:32 25 4
gpt4 key购买 nike

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

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

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

    最佳答案

    我不认为在构建期间有一种访问主机的好方法,但它是可以访问的:使用 ifconfig或类似的查看主机的 IP 地址。

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

    wget http://10.0.1.17/repo.tar

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

    关于routing - 如何在 'docker build' 期间路由到 docker 容器中的主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28954067/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com