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

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

Dockerfile:

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

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

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

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

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

正如OP dhairya所评论的那样 ,并且在我的评论中提到的文档中提到:“ Docker container networking ”和docker build ,可以设置为在主机 RUN期间build立RUN指令的联网模式:然后localhost会引用localhost 。

  docker build --network="host" 

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

POST /build接受networkmode参数来指定在构build期间使用的networking。


但是,如果你不需要Git在你的实际构build的图像(主要进程运行),这将是更容易

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

     COPY repo_dir . 

(这里“ . ”表示正在构build的图像中的当前WORKDIR