繁体   English   中英

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

[英]How to access the Host's machine's localhost 127.0.0.1 from docker container

我在本地主机上托管 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 容器连接主机的本地主机呢?

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

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

正如OP dhairya所评论的,以及我在我的评论中提到的文档中提到的:“ Docker 容器网络”和docker build ,您可以在构建期间设置托管RUN指令的网络模式:然后localhost将引用主机 localhost .

 docker build --network="host"

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

POST /build接受networkmode参数来指定构建期间使用的网络。


但是,如果您在实际构建的映像中不需要 Git(为了运行它的主要进程),则更容易

  • 在 docker 构建之前在本地(直接在主机上)克隆 repo。
    您需要将它克隆到 Dockerfile 所在的位置,因为它必须相对于正在构建的源目录(构建的上下文)。
  • 在 Dockerfile 中使用COPY指令,复制代表检出 Git 存储库的主机文件夹。
    注意:如果您的目标映像中没有 git,请将.git/ : 添加到您的.dockerignore (与您的.dockerignore位于同一文件夹中的文件),以便复制该克隆存储库的repo_dir/.git文件夹。

     COPY repo_dir .

(这里的 ' . ' 代表正在构建的图像中的当前WORKDIR

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM