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

17 阅读4分钟

🚀 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

    运行

    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 项目的最优方案。