🚀 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. 宝塔添加反向代理(关键步骤)
-
登录宝塔面板 → 进入「网站」→ 切换到「反向代理」标签页
-
点击「添加反向代理」,填写配置:
- 域名:你的自定义域名(如
docker.example.com) - 目标:
http://127.0.0.1:8081(Docker Nginx 映射的宿主机端口) - 发送域名 (host) :
$http_host(默认即可,传递真实域名给后端) - 备注:自定义(可选)
- 域名:你的自定义域名(如
-
点击「确定」,宝塔自动生成 Nginx 反向代理配置
3. 配置 HTTPS(可选但推荐)
- 进入反向代理站点的「设置」→「SSL」
- 选择「Let's Encrypt」→ 点击「申请」,自动获取免费 SSL 证书
- 开启「强制 HTTPS」,确保所有请求跳转到 HTTPS
4. 访问验证
浏览器输入你的域名(如 https://docker.example.com),正常显示项目页面即部署成功。
四、我遇到的坑与解决方案(避坑必看)
坑 1:提示「网站已存在,请勿重复添加」
原因:提前在「PHP 项目」里手动添加了该域名的站点,域名被占用,无法再创建反向代理。解决:
- 回到「PHP 项目」列表,找到该域名站点 → 进入「设置」→「删除站点」(仅删除配置,不删除文件)
- 重新在「反向代理」标签页添加配置,即可成功保存。
坑 2:访问域名提示「连接被拒绝」(Connection refused)
原因:宝塔 Nginx 未启动 / 未监听 80 端口,域名请求无法被处理。排查与解决:
-
执行命令验证 80 端口监听状态:
bash
运行
netstat -tlnp | grep :80- 无输出:Nginx 未启动 → 宝塔「软件商店」重启 Nginx
- 有输出但非 Nginx 进程:80 端口被其他程序占用 → 停止占用程序后重启 Nginx
-
若配置未生效:删除反向代理重新添加,触发宝塔重载 Nginx 配置
坑 3:Docker 端口映射错误
原因:docker-compose.yml 中端口映射配置错误,导致 127.0.0.1:端口 无法访问。解决:
-
执行命令查看容器状态:
bash
运行
docker compose ps确认 Nginx 容器端口为
0.0.0.0:8081->80/tcp(宿主机端口:容器端口) -
若映射错误,修改
docker-compose.yml后执行:bash
运行
docker compose down && docker compose up -d
五、优化建议(生产环境更稳定)
-
端口隔离:Docker 容器端口尽量使用非 80/443(如 8081、8082),避免与宝塔 Nginx 冲突
-
配置备份:定期备份宝塔反向代理配置和
docker-compose.yml,方便迁移或恢复 -
日志排查:访问异常时,优先查看:
- Docker 容器日志:
docker logs my-nginx - 宝塔 Nginx 日志:
/www/wwwlogs/你的域名.log
- Docker 容器日志:
-
安全加固:宝塔面板开启防火墙,仅放行 80/443/22 等必要端口,避免端口暴露风险
六、流程总结(一句话记忆)
Docker 跑项目,宝塔绑域名;反向代理填
127.0.0.1:端口,一键启动就通了。
七、后记
从宝塔面板过渡到 Docker 后,域名绑定依然可以用熟悉的可视化操作完成,不需要从零学习原生 Nginx 配置。Docker 解决了环境一致性和多项目隔离问题,宝塔解决了域名、SSL 和反向代理的便捷操作问题,两者结合是新手部署 Docker 项目的最优方案。