nginx如何映射docker容器内的域名?,有哪些方法?

nginx映射docker容器内的域名,本质就是让nginx根据域名规则把请求转发给对应容器的IP和端口,配好server_name和proxy_pass即可。

很多人第一次接触docker部署时,都会卡在这一步:容器跑起来了,域名解析也指向了服务器,但浏览器输入域名就是打不开,原因很简单容器内部有自己的网络命名空间,nginx在宿主机上监听80端口,但容器里的服务并没有直接暴露出来,中间隔着一堵墙,打通这堵墙,就是今天要聊的重点。

零基础入门 Nginx 反向代理配置 | 自定义域名绑定教程 | 从理论到实战的完整指南
加载中
零基础入门 Nginx 反向代理配置 | 自定义域名绑定教程 | 从理论到实战的完整指南

nginx如何映射docker容器域名到宿主机端口

先弄明白请求的完整链路:用户输入域名 → DNS解析到服务器IP → 宿主机nginx接收请求 → 通过配置规则找到容器IP和端口 → 完成转发,其中最关键的就是两个配置指令:server_name 负责匹配域名,proxy_pass 负责指定转发目标。

在实际部署中,有两种主流场景,配置方式完全不一样:

  • nginx在宿主机上,容器在docker网络里:需要拿到容器的内网IP或映射端口,直接转发到容器IP:端口。
  • nginx本身也在容器里:需要通过docker内部网络来访问其他容器,这就涉及容器间的通信方式。

获取docker容器IP和端口信息

这条命令能看到容器的完整网络配置:

docker inspect 容器名 | grep -A 5 "NetworkSettings"

通常会得到类似 168.1.7 这样的内网IP,以及端口映射关系 8080/tcp -> 0.0.0.0:8080,这里有个细节要注意:容器内网IP不是固定的,容器重启后可能变化,所以更稳的做法是直接用docker的网络别名(alias)或容器名来访问。

宿主机nginx转发到容器

配置写在 /etc/nginx/conf.d/ 下,单独建一个域名配置文件:

server {
    listen 80;
    server_name web.example.com;
    location / {
        proxy_pass http://192.168.1.7:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

三个header是nginx反代的标配,proxy_set_header Host $host 尤其重要,不然容器里的应用拿到的是内网IP而不是你的域名,重定向和静态资源路径可能全部错乱。

nginx如何映射docker容器内的域名?,有哪些方法?

docker部署nginx配置域名并实现容器间通信

这种场景更复杂一点,但也更常见,项目一般包含前端nginx容器、后端API容器、数据库容器,nginx要作为入口,把请求转发给其他容器,此时不能再填IP,因为容器的IP是动态的,而是要走 docker网络内部dns解析

创建自定义docker网络

先把容器放到同一个网络中,这是容器间域名互通的前提:

docker network create webnet

启动容器时指定网络:

docker run -d --name backend --network webnet my-api-image
docker run -d --name nginx-gateway --network webnet -p 80:80 nginx

两个容器在同一网络下,nginx容器里就能直接用容器名当域名来访问,配置改为:

server {
    listen 80;
    server_name web.example.com;
    location /api/ {
        proxy_pass http://backend:8080/;
    }
    location / {
        proxy_pass http://frontend:3000;
    }
}

容器名 backend 在docker网络内会被自动解析为对应容器的IP地址,不需要手动维护IP变化,重启容器也不影响。

用docker-compose编排场景

用compose启动时,服务名就是容器名,天然支持上述解析。docker-compose.yml 示例:

version: "3"
services:
  backend:
    image: my-api-image
    networks:
      - webnet
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    networks:
      - webnet
networks:
  webnet:

nginx配置文件已经挂载出来了,直接修改宿主机上的 nginx.conf 即可,改完reload,这是当前生产环境用得最多的部署方式。

下面是三种常见方案的对比,方便你根据自身情况选择:

nginx如何映射docker容器内的域名?,有哪些方法?

方案 适用场景 优点 缺点
宿主机nginx直接转发容器IP nginx装在宿主机,容器数量少 配置简单,直观 容器IP变化需要重新配置
nginx容器加入同一docker网络 全容器化部署 用容器名通信,IP变化无感 需要额外维护网络配置
宿主机nginx转发到容器映射端口 不想动nginx容器,容器端口已映射到宿主机 不依赖docker网络 多一层NAT,性能略差

nginx容器内访问宿主机及域名解析常见问题

把nginx塞进容器后,遇到的第三个高频问题是:nginx容器内访问宿主机上的某些服务怎么办? 比如后端没容器化,直接跑在宿主机上,nginx容器里没法用 localhost 连到宿主机。

宿主机网关地址方案

docker容器默认通过 bridge 网络访问外网,宿主机在容器里的地址通常是 17.0.1,在nginx配置里直接写:

proxy_pass http://172.17.0.1:8080;

这种方式够用,但IP是docker默认网段,如果改了网段或用了 host 网络模式就不准了。

host.docker.internal方案

Docker Desktop(Windows/Mac)内置了 host.docker.internal 这个特殊域名,直接指向宿主机,Linux环境下需要加个参数才能用:

docker run -d --add-host host.docker.internal:host-gateway --name nginx-gateway nginx

然后在nginx配置里写 proxy_pass http://host.docker.internal:8080,这个方案更语义化,不易出错。

排查nginx映射docker容器域名失败的方向

遇到域名映射不上,多数情况不是nginx配置问题,而是连接链路上某个环节断了,按以下顺序检查:

  • 容器端口有没有暴露docker ps 看PORTS列,没映射的话外面根本访问不到容器。
  • 容器之间能否互通:进入nginx容器执行 ping backendcurl http://backend:8080,不通就检查网络是否在同一个 docker network 下。
  • 配置后有没有reload:改了配置文件必须 nginx -s reload,很多修改不生效都是因为这个。
  • 服务防火墙规则:简米云、酷番云的服务器安全组里,80/443端口没放行会导致外部访问失败,但服务器本地curl正常。

行业共识认为,nginx容器化部署时应避免把域名写死在配置里,通过环境变量或配置文件挂载来管理不同环境的域名,能让运维省掉大量重复修改。

nginx映射docker容器多域名及HTTPS配置思路

单域名搞定后,多域名场景会复杂一些,但思路完全一致

nginx如何映射docker容器内的域名?,有哪些方法?

每个域名一个server块,各自指向不同的容器。

server {
    listen 80;
    server_name a.example.com;
    location / {
        proxy_pass http://container-a:8080;
    }
}
server {
    listen 80;
    server_name b.example.com;
    location / {
        proxy_pass http://container-b:9090;
    }
}

HTTPS证书挂载方式

证书文件在宿主机上,nginx容器里需要挂载才能读取:

docker run -d 
  -p 443:443 
  -v /etc/nginx/ssl:/etc/nginx/ssl:ro 
  -v ./nginx.conf:/etc/nginx/conf.d/default.conf 
  nginx

nginx配置里加上:

server {
    listen 443 ssl;
    server_name web.example.com;
    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privatekey.pem;
    location / {
        proxy_pass http://backend:8080;
    }
}

注意证书路径是容器内部的路径,不是宿主机路径。

批量管理多容器的配置实践

容器多了以后,逐条写server块容易乱,建议用include方式拆分配置:

http {
    include /etc/nginx/conf.d/.conf;
}

每个域名单独建一个 .conf 文件,互不干扰,排查问题的时候只需要看对应域名的配置文件即可。

nginx映射docker容器域名常见问题解答

问:nginx容器里配了server_name为指定域名,访问IP却显示默认站点?

这是没匹配到server块导致回落到默认配置,先确认用 docker exec nginx-container nginx -T 查看实际加载配置,再检查访问请求的Host头是否确实与server_name一致,浏览器访问时如果域名没解析到服务器,直接填IP测试,此时Host是IP,当然不会命中域名规则。

问:nginx转发到容器名,但宿主机nginx解析不了backend这个名称?

宿主机nginx不在docker网络里,docker网络内的DNS解析对宿主机不生效,要么把宿主机nginx加入docker网络,要么改用容器映射到宿主机的IP和端口,二选一,没有第三种通用做法。

问:docker容器重启后nginx配置里的内网IP需要改吗?

如果nginx配置里写的是容器IP,重启后容器IP可能改变,需要重新修改配置并reload,换用docker网络中的容器名或服务名来访问,就能避免这类问题。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/626525.html

(0)
虚拟机几种架构怎么选?,高并发下哪个好?
上一篇 2026年9月6日 01:58
VMISS日本VPS好用吗?日本VPS推荐测评
下一篇 2026年6月25日 16:31

相关推荐

  • 广域网怎么架设虚拟主机?广域网搭建虚拟主机教程

    在广域网环境中成功架设虚拟主机,核心在于解决公网IP获取、端口映射配置、域名解析绑定以及安全权限管控这四大关键环节,通过合理的网络拓扑规划与服务器软件配置,任何局域网内的计算机都能转化为对外提供服务的稳定节点,这一过程不仅实现了低成本的服务部署,更体现了网络资源虚拟化的核心技术逻辑, 前期环境准备与网络基础架构……

    2026年4月2日
    7600
  • 备案域名能在本地服务器搭建吗,备案信息会变吗?

    已备案域名完全能在本地服务器搭建网站,备案信息在大多数情况下不会自动变化,但一旦更换服务器接入商或修改关键主体信息,就必须主动变更备案,很多站长手里有已备案域名,但因为个人项目、学习测试或成本考虑,想直接把网站放到家里的服务器上,想法没问题,但操作前必须搞清楚备案规则和本地服务器的特殊性,否则轻则网站打不开,重……

    2026年9月1日
    300
  • html的js怎么优化?前端js性能优化技巧

    HTML的JS优化核心在于减少主线程阻塞、降低资源体积并提升渲染优先级,通过代码分割、异步加载和关键渲染路径重构,可显著提升页面加载速度与用户交互体验,在2026年的Web开发环境中,性能优化已不再是单纯的“锦上添花”,而是决定产品生死的关键因素,随着用户设备性能的普遍提升,用户对页面响应速度的阈值也在不断抬高……

    2026年6月7日
    4100
  • 互动云主机MTBF认证找哪家?MTBF认证机构有哪些

    互动云主机的MTBF(平均无故障工作时间)认证并非单一机构颁发,而是由具备CNAS/CMA资质的第三方检测机构依据GB/T 2887或IEC 60606等标准进行可靠性测试后出具报告,核心目的是验证云基础设施在长期运行中的稳定性与可用性,在云计算深入企业数字化转型的当下,选择云主机不再仅仅看CPU核数和内存大小……

    2026年6月1日
    4700
  • 带宽1M等于多少流量?1M带宽实际下载速度是多少

    带宽1M等于多少流量?一次讲清楚核心结论:1M带宽在理论上每月最多可传输约324GB数据,但在真实服务器环境中,有效流量通常在200GB至300GB之间, 许多用户误以为1M带宽速度极慢,无法支撑业务,这其实是一个巨大的误区,对于初创型网站、轻量级应用或企业官网而言,1M带宽若经过合理优化,完全能够支撑日均数千……

    2026年3月3日
    17500
  • 广州300g高防dns解析怎么攻击?高防DNS能防住哪些攻击

    广州300g高防DNS解析防御体系的核心在于构建“云端清洗+本地抗D+智能调度”的三位一体架构,单纯依赖DNS解析无法抵御300G量级的暴力流量攻击,必须通过高防IP引流与DNS智能解析的深度联动,才能实现业务在超大流量攻击下的连续性,防御的本质不是被动挨打,而是通过架构设计将攻击流量隔离在业务核心之外,这也是……

    2026年4月1日
    9800
  • 互联网专线接入方案有哪些?企业宽带专线资费价格是多少

    企业选择互联网专线接入,核心在于通过独享带宽保障业务连续性与数据安全,虽然初期投入高于宽带,但长期来看能显著降低因网络波动导致的隐性成本,在现代商业环境中,网络不再是简单的连接工具,而是企业的“数字血管”,当视频会议卡顿、云端数据同步延迟时,损失的是真金白银的信任与效率,业内专家指出,稳定的网络基础设施是数字化……

    服务器宽带 2026年6月1日
    7300
  • html5电商网站模板怎么选?2026最新免费源码推荐

    HTML5电商网站模板是构建现代化移动端优先电商平台的最佳选择,它能显著提升加载速度、优化用户体验并增强搜索引擎排名,是2026年企业数字化转型的核心基础设施,在移动互联网渗透率极高的当下,传统的PC端电商模式已难以满足用户碎片化的购物需求,用户不再愿意等待漫长的页面加载,也不习惯在小屏幕上缩放浏览,HTML5……

    2026年6月12日
    5110
  • iis域名配置解析时常见错误有哪些,如何排查?

    IIS域名配置解析域名时,九成以上的报错都能归结为DNS解析记录错误、站点绑定错位、SSL证书端口冲突这三类根源问题,下面按出错场景逐层拆解,每一步都有可操作的验证命令,IIS域名解析不了是什么原因域名解析不到IIS站点,先别急着动服务器配置,行业共识认为,这类问题中较大比例出在DNS解析环节,而不是IIS本身……

    2026年9月6日
    000
  • net域名含义是什么?.net域名注册费用是多少

    .net域名是网络基础设施的基石,代表“网络”(Network),在2026年依然具备极高的品牌信任度和SEO价值,尤其适合技术平台、云服务及大型互联网企业,很多人听到.net,第一反应是“.com被注册了之后的退而求其次”,这种观念在十年前或许成立,但在今天的互联网生态中,.net早已完成了从“备选方案”到……

    2026年6月24日
    1400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注