我在本地主机上托管了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?
答案 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(因为它的主要流程可以运行),那么它会更容易
在Dockerfile中使用COPY
directive,复制代表签出的Git仓库的主机文件夹。
注意:将.git/
:添加到您的.dockerignore
(与Dockerfile位于同一文件夹中的文件),以便不复制该克隆回购的repo_dir/.git
文件夹,如果您的目标图像中没有git。
COPY repo_dir .
(此处“.
”代表正在构建的图片中的当前WORKDIR