8

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

4

1 回答 1

13

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

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

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

 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(与 Dockerfile 位于同一文件夹中的文件)中,以便复制该克隆存储库的文件夹。repo_dir/.git

    COPY repo_dir .
    

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

于 2017-11-02T05:25:08.200 回答