如何从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
)