Debian家庭服务器Docker服务:如何将端口映射为本地子域名?
家庭内网实现子域名映射Docker服务的方案
完全可以实现,核心需要本地DNS解析+反向代理两个环节配合,以下是具体操作步骤:
一、配置本地DNS解析
目的是让内网设备能把wiki.host-name.local这类子域名解析到你的服务器静态IP上,有两种常用方式:
方式1:路由器端配置(推荐,一次配置全内网生效)
如果你的支持自定义DNS记录,直接添加两条静态解析:
- 子域名
wiki.host-name.local→ 服务器静态内网IP(比如192.168.3.10) - 子域名
grafana.host-name.local→ 同一服务器IP
方式2:单设备hosts文件修改(适合设备少的场景)
在需要访问服务的设备上编辑hosts文件:
- Linux/macOS:编辑
/etc/hosts,添加两行:192.168.3.10 wiki.host-name.local 192.168.3.10 grafana.host-name.local - Windows:编辑
C:\Windows\System32\drivers\etc\hosts,添加同样内容(需要管理员权限)
二、部署反向代理服务(以Nginx Proxy Manager为例,Docker部署)
反向代理会监听服务器的80端口,根据子域名把请求转发到对应的Docker服务:
创建
docker-compose.yml文件:version: '3.8' services: nginx-proxy-manager: image: jc21/nginx-proxy-manager:latest restart: unless-stopped ports: - 80:80 # 处理HTTP请求的端口 - 81:81 # 管理后台端口 - 443:443 # 可选,用于HTTPS volumes: - ./npm-data:/data - ./npm-letsencrypt:/etc/letsencrypt启动服务:
docker-compose up -d配置反向代理规则:
- 访问
http://host-name.local:81进入管理后台,初始账号admin@example.com,密码changeme - 添加代理规则:
- 针对wiki服务:
- 域名填
wiki.host-name.local - 转发目标填
http://你的wiki容器名:容器内部端口(比如wiki容器内部端口是80,就填http://wiki:80)
- 域名填
- 针对grafana服务:
- 域名填
grafana.host-name.local - 转发目标填
http://你的grafana容器名:3000(grafana默认内部端口3000)
- 域名填
- 针对wiki服务:
- 访问
三、优化Docker网络(可选但推荐)
把反向代理和所有需要映射的服务放到同一个自定义Docker网络里,这样可以用容器名直接访问,不用把服务端口暴露到主机:
创建自定义网络:
docker network create proxy-network修改各服务的
docker-compose.yml,添加网络配置:networks: - proxy-network同时给Nginx Proxy Manager也添加同样的网络配置,确保在同一网络内。
注意事项
- 确保服务器的80端口没有被其他服务占用,反向代理需要通过80端口接收子域名请求
- 如果需要HTTPS,可在Nginx Proxy Manager里生成自签名证书,内网使用足够安全
- 内网设备较多时,推荐用Pi-hole这类本地DNS服务器,同时实现DNS解析和广告拦截
内容的提问来源于stack exchange,提问作者Linux Lover
相关产品推荐
相关产品推荐

