当 Nginx 部署在 Docker 容器中,要访问宿主机的 8080 服务,可根据不同的 Docker 网络模式采用不同的方法,以下为你详细介绍:
桥接网络模式(默认模式)
在桥接网络模式下,容器有独立的 IP 地址,与宿主机通过虚拟网桥进行通信。可以使用宿主机的特殊 IP host.docker.internal
(部分 Docker 环境支持)或者宿主机的网桥 IP 来访问宿主机的服务。
方法一:使用 host.docker.internal
- 适用环境:Docker Desktop(适用于 Windows 和 macOS)以及部分 Linux 发行版支持该特殊域名,它会解析为宿主机的 IP 地址。
- 修改 Nginx 配置:
编辑 Nginx 配置文件(假设是
nginx.conf
),将proxy_pass
的地址修改为http://host.docker.internal:8080
。示例如下:
server {
listen 80;
server_name _;
location / {
proxy_pass http://host.docker.internal:8080;
}
}
- 重启 Nginx 容器: 保存配置文件后,重启 Nginx 容器使配置生效。
docker restart <nginx_container_name_or_id>
方法二:使用宿主机的网桥 IP
- 查找宿主机的网桥 IP:
在 Linux 系统中,可以通过
ip addr show docker0
命令查看 Docker 网桥的 IP 地址。通常输出中inet
后面的 IP 就是所需的地址,例如:
ip addr show docker0
假设输出结果中显示 inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
,则宿主机的网桥 IP 为 172.17.0.1
。
- 修改 Nginx 配置:
编辑 Nginx 配置文件,将
proxy_pass
的地址修改为查找到的宿主机网桥 IP 和对应的端口。示例如下:
server {
listen 80;
server_name _;
location / {
proxy_pass http://172.17.0.1:8080;
}
}
- 重启 Nginx 容器: 保存配置文件后,重启 Nginx 容器使配置生效。
docker restart <nginx_container_name_or_id>
主机网络模式
配置步骤
- 启动 Nginx 容器时使用主机网络模式:
在启动 Nginx 容器时,使用
--network=host
参数,让容器直接使用宿主机的网络栈。示例命令如下:
docker run -d --name nginx --network=host -v /your/local/nginx.conf:/etc/nginx/nginx.conf nginx
- 修改 Nginx 配置:
编辑 Nginx 配置文件,将
proxy_pass
的地址修改为http://127.0.0.1:8080
。示例如下:
server {
listen 80;
server_name _;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
在主机网络模式下,容器和宿主机共享网络栈,所以可以直接使用 127.0.0.1
来访问宿主机的服务。
注意:本文归作者所有,未经作者允许,不得转载