docker(Mac / Windows):如何从容器访问主机服务?

我可以在--network="host" docker run命令中使用--network="host"选项从--network="host"容器中访问主机的服务。 这在Ubuntu上运行良好。 但是,相同的命令在Mac OS Sierra(10.12.4)和Windows 10上不起作用。

我的用例是我有一个本地mongoDB服务器上运行mongodb://127.0.0.1:27017。 我使用以下命令启动我的容器:

docker run -p 3002:3002 --network="host" image-name

Dockerfile:

 FROM node:7.5 RUN npm install -g pm2 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app COPY package.json /usr/src/app RUN npm install COPY . /usr/src/app EXPOSE 3002 ENV NODE_ENV local CMD pm2 start --no-daemon server.js 

我曾尝试在Mac和Windows上使用--net="host"选项。 它不起作用。 请帮忙。

MacOS和(Windows操作系统)本身不能运行Docker,所以Docker for Mac实际上在你的Mac上安装了一个非常小的Hxyve linux虚拟机。 你的docker集装箱运行在这个虚拟机里,他们看起来像是在你的mac下运行,很多时候。 当你指定 – --network host你的docker集装箱将共享相同的networking接口作为Hxyve虚拟机,而不是你的Mac。 因此,Mac上的环回(本地主机)networking上运行的内容无法到达容器。

你需要让你的mongo数据库可以访问,例如,在Hxyve VM可以访问的网桥上运行它,而不是127.0.0.1。 它通常在192.168.65.X子网中。

Interesting Posts