如何从docker容器访问Host的计算机的localhost 127.0.0.1

时间:2017-11-02 05:05:06

标签: docker docker-compose dockerfile git-daemon

我在本地主机上托管了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

但它不起作用,它看起来像在容器内试图连接容器的localhost。

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

1 个答案:

答案 0 :(得分:9)

  

它不起作用,它看起来像是在容器中试图连接容器的localhost。

是的,这就是容器提供的隔离背后的全部想法,甚至是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接受networkmode参数来指定构建期间使用的网络。

但如果您在实际构建的图像中不需要Git(因为它的主要流程可以运行),那么它会更容易

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

    COPY repo_dir .
    

(此处“.”代表正在构建的图片中的当前WORKDIR