如何从 docker 容器访问主机计算机的本地主机 127.0.0.1



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

Dockerfile:

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

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

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

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

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

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

docker build --network="host"

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

POST /build接受networkmode参数来指定构建过程中使用的网络。


但如果您在实际构建的映像中不需要Git(用于运行其主进程),会更容易

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

    COPY repo_dir .
    

(此处"."表示正在构建的图像中的当前WORKDIR)

相关内容

最新更新