gpt4 book ai didi

docker - 如何从 docker 容器访问主机的 localhost 127.0.0.1

转载 作者:行者123 更新时间:2023-12-02 17:39:20 25 4
gpt4 key购买 nike

我在本地主机上托管了 Git 守护进程,即 '/usr/bin/git daemon --listen=127.0.0.1 --base-path=/opt'作为 systemd服务,我正在尝试从 docker 容器访问它。我没有提到端口,因为我不想将端口暴露给外部网络。

Dockerfile:

RUN git clone git://127.0.0.1/repo/ repo_dir

但它不工作,它看起来像在容器内试图连接容器的本地主机。

那么如何从 Docker 容器连接主机的本地主机呢?

最佳答案

its not working, its looks like inside container its trying to connect localhost of container.



是的,这就是容器提供的隔离背后的全部想法,甚至 docker build (它为每个 Dockerfile 行构建一个容器,并将其提交到一个中间镜像中)。

正如 OP dhairya 所评论的,并在我在评论中提到的文档中提到:“ Docker container networking ”和 docker build ,您可以设置为 主持人 RUN的组网方式构建期间的说明:然后 localhost将引用主机 localhost。
 docker build --network="host"

这是因为 API 1.25+ only , 在 docker v.1.13.0-rc5 (2017 年 1 月)

POST /build accepts networkmode parameter to specify network used during build.



但是,如果您在实际构建的镜像中不需要 Git(为了运行它的主要进程),则更容易
  • 在 docker 构建之前在本地(直接在主机上)克隆 repo。
    您需要将它克隆到 Dockerfile 所在的位置,因为它必须相对于正在构建的源目录(构建的上下文)。
  • 使用 COPY directive在 Dockerfile 中,复制代表 check out 的 Git 存储库的主机文件夹。
    注意:添加 .git/ : 给您的 .dockerignore (文件与 Dockerfile 位于同一文件夹中),以免复制 repo_dir/.git如果您的目标图像中没有 git,请复制该克隆存储库的文件夹。
    COPY repo_dir .

  • (这里的“ .”代表正在构建的镜像中的当前 WORKDIR)

    关于docker - 如何从 docker 容器访问主机的 localhost 127.0.0.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47067944/

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