blog icon indicating copy to clipboard operation
blog copied to clipboard

Docker Nginx 容器直接访问宿主机

Open zhangyu921 opened this issue 7 years ago • 5 comments

在使用 nginx docker 容器配置反向代理的时候,默认不能直接使用 localhost,因为访问它指向的是这个容器本身。而本机的内网 ip 时常改变,如果没有联网还会没有内网地址,开发测试非常的不方便。

在 Desktop 环境下,可以使用 host.docker.internal docker 提供的特殊 DNS 访问宿主机。

如果是 Linux 环境还可以使用 docker 提供的 host networking,将容器的端口直接发布到宿主机上。

host networking 方法只能用于Linux环境下的docker,不支持 Docker Desktop for Mac,Docker Desktop for Windows,或 Docker EE for Windows Server。

举个例子:如果 Dockerfile EXPOSE的端口是 80,那么使用host networking方式 启动容器,就可以直接用宿主机的ip通过80端口访问这个服务,不需要指定 --port。同时容器也可以直接访问宿主机其他端口的服务,不需要通过内网ip。

方法很简单,命令启动时,加上--network host就可以了:

$ docker run --rm --network host nginx:alpine

在 docker-compose.yml 中使用:

version: '2'
services:
  nginx:
    image: nginx:alpine
    network_mode: "host"
    volumes:
      - './html:/usr/share/nginx/html'
      - './conf:/etc/nginx'
    restart: always

ref:

zhangyu921 avatar Nov 23 '18 10:11 zhangyu921

https://docs.docker.com/network/host/ 官网的host network介绍中有这么一句“The host networking driver only works on Linux hosts, and is not supported on Docker Desktop for Mac, Docker Desktop for Windows, or Docker EE for Windows Server.”,所以windows下面不能用,,

mystterio avatar May 29 '19 12:05 mystterio

https://docs.docker.com/network/host/ 官网的host network介绍中有这么一句“The host networking driver only works on Linux hosts, and is not supported on Docker Desktop for Mac, Docker Desktop for Windows, or Docker EE for Windows Server.”,所以windows下面不能用,,

@mystterio 是的,感谢补充~

zhangyu921 avatar Jun 03 '19 01:06 zhangyu921

mark

maskwang avatar Jul 28 '19 14:07 maskwang

这个--network host只支持linux 那在 mac 下如何实现 容器内的nginx 反向代理宿主机的服务呢?

suncunhu avatar Dec 14 '19 03:12 suncunhu

@suncunhu 18.03版本后,可以使用host.docker.internal访问宿主机

zhangyu921 avatar Dec 14 '19 07:12 zhangyu921