Docker 项目绑定域名:宝塔反向代理完整实战指南(避坑版)

🚀 Docker 项目绑定域名:宝塔反向代理完整实战指南(避坑版)

(从踩坑到跑通,新手可直接复用的部署流程)


一、背景与目标

我已经在服务器上通过 Docker 跑通了 LNMP 项目(Nginx+PHP+MySQL),容器正常运行且可通过 IP:端口 访问,现在需要将项目绑定自定义域名,让用户通过域名直接访问。

核心方案:Docker 负责环境运行,宝塔面板负责域名绑定、反向代理和 HTTPS 配置,全程不修改 Docker 配置,无痛过渡。


二、核心原理

  • Docker 容器:将项目运行在 8081 端口(可自定义),仅对内暴露服务
  • 宝塔 Nginx:作为反向代理,接收用户对域名的请求(默认 80/443 端口),转发到 Docker 容器的 127.0.0.1:8081
  • 域名解析:将域名指向服务器公网 IP,完成链路打通

三、完整操作流程(一步不落)

1. 前置准备

  • Docker 项目已正常启动,确认端口映射正确(如 8081:80)
  • 域名已解析到服务器公网 IP
  • 宝塔面板已安装 Nginx 服务

2. 宝塔添加反向代理(关键步骤)

  1. 登录宝塔面板 → 进入「网站」→ 切换到「反向代理」标签页

  2. 点击「添加反向代理」,填写配置:

    • 域名 :你的自定义域名(如 docker.example.com)
    • 目标 :http://127.0.0.1:8081(Docker Nginx 映射的宿主机端口)
    • 发送域名 (host) :$http_host(默认即可,传递真实域名给后端)
    • 备注:自定义(可选)
  3. 点击「确定」,宝塔自动生成 Nginx 反向代理配置

3. 配置 HTTPS(可选但推荐)

  1. 进入反向代理站点的「设置」→「SSL」
  2. 选择「Let's Encrypt」→ 点击「申请」,自动获取免费 SSL 证书
  3. 开启「强制 HTTPS」,确保所有请求跳转到 HTTPS

4. 访问验证

浏览器输入你的域名(如 https://docker.example.com),正常显示项目页面即部署成功。


四、我遇到的坑与解决方案(避坑必看)

坑 1:提示「网站已存在,请勿重复添加」

原因 :提前在「PHP 项目」里手动添加了该域名的站点,域名被占用,无法再创建反向代理。解决:

  1. 回到「PHP 项目」列表,找到该域名站点 → 进入「设置」→「删除站点」(仅删除配置,不删除文件)
  2. 重新在「反向代理」标签页添加配置,即可成功保存。

坑 2:访问域名提示「连接被拒绝」(Connection refused)

原因 :宝塔 Nginx 未启动 / 未监听 80 端口,域名请求无法被处理。排查与解决:

  1. 执行命令验证 80 端口监听状态:

    bash

    运行

    perl 复制代码
    netstat -tlnp | grep :80
    • 无输出:Nginx 未启动 → 宝塔「软件商店」重启 Nginx
    • 有输出但非 Nginx 进程:80 端口被其他程序占用 → 停止占用程序后重启 Nginx
  2. 若配置未生效:删除反向代理重新添加,触发宝塔重载 Nginx 配置

坑 3:Docker 端口映射错误

原因 :docker-compose.yml 中端口映射配置错误,导致 127.0.0.1:端口 无法访问。解决:

  1. 执行命令查看容器状态:

    bash

    运行

    复制代码
    docker compose ps

    确认 Nginx 容器端口为 0.0.0.0:8081->80/tcp(宿主机端口:容器端口)

  2. 若映射错误,修改 docker-compose.yml 后执行:

    bash

    运行

    复制代码
    docker compose down && docker compose up -d

五、优化建议(生产环境更稳定)

  1. 端口隔离:Docker 容器端口尽量使用非 80/443(如 8081、8082),避免与宝塔 Nginx 冲突

  2. 配置备份 :定期备份宝塔反向代理配置和 docker-compose.yml,方便迁移或恢复

  3. 日志排查:访问异常时,优先查看:

    • Docker 容器日志:docker logs my-nginx
    • 宝塔 Nginx 日志:/www/wwwlogs/你的域名.log
  4. 安全加固:宝塔面板开启防火墙,仅放行 80/443/22 等必要端口,避免端口暴露风险


六、流程总结(一句话记忆)

Docker 跑项目,宝塔绑域名;反向代理填 127.0.0.1:端口,一键启动就通了。


七、后记

从宝塔面板过渡到 Docker 后,域名绑定依然可以用熟悉的可视化操作完成,不需要从零学习原生 Nginx 配置。Docker 解决了环境一致性和多项目隔离问题,宝塔解决了域名、SSL 和反向代理的便捷操作问题,两者结合是新手部署 Docker 项目的最优方案。

相关推荐
锋行天下9 小时前
DeepSeek写Langgraph就是个大傻逼,一本正经胡说八道
前端·人工智能·后端
小小张说故事11 小时前
Python 的 str 为什么设计成不可变?拆开字符串驻留、字符串池,以及 += 拼接到底慢在哪
后端·python
AI架构师之家11 小时前
我把 Hermes 这匹"马"养了两周,它干了一件让我有点发毛的事
后端
dpharness11 小时前
块协议用了两周,我把九个坑按顺序记下来了
后端
加宝的起点雷达11 小时前
跑了两周的信号日报,我把降级链改了四次
人工智能·后端
IT枫斗者枫哥11 小时前
CompletableFuture失败后返回空列表:异常没了,业务含义也变了
java·后端
Gopher_HBo11 小时前
opentelemetrySDK源码解析
后端
UrbanJazzerati11 小时前
AutoHotkey v2 零基础快速入门 Part 10:给路线回放添加高精度计时,理解累计延迟与路线一致性
后端
70后写java的老码农12 小时前
Spring Boot 3 + ShardingSphere-JDBC 实战:一次把读写分离和分库分表跑通
后端
泡海椒12 小时前
04-饼图评级构成-信用评级构成
后端