IIWAB Nginx 部署在 Docker 容器中如何访问宿主机的 8080 服务 - IIWAB

Nginx 部署在 Docker 容器中如何访问宿主机的 8080 服务

IIWAB 1月前 ⋅ 110 阅读

当 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 来访问宿主机的服务。


全部评论: 0

    我有话说: