思路:域名解析到服务器 IP → 宝塔新建站点(不装 PHP、不建数据库)→ Nginx 反向代理到 Docker 容器端口 规则:Docker 只映射非 80/443 端口,所有 80/443、SSL 全由宝塔接管
一、前置规范(必看)
- 宝塔 LNMP 正常运行,原有 PHP 网站不动
- Docker 容器映射格式:
宿主机端口:容器内部端口- Web 容器统一宿主机端口:
127.0.0.1:80xx(示例:8081、8082),不要直接 - p 80:80 - MySQL 容器:
127.0.0.1:3307、3308...
- Web 容器统一宿主机端口:
- 容器启动禁止加
--net=host

二、示例:Docker 部署一个 WEB 项目
1、容器启动命令示例(Nginx/PHP 容器通用)
# 示例:项目映射本机127.0.0.1:8081,容器内80端口 docker run -d \ --name web-demo \ -p 127.0.0.1:8081:80 \ -v /www/docker/demo:/usr/share/nginx/html \ nginx
-p 127.0.0.1:8081:80:只监听本机,外网无法直接访问,全部走宝塔 Nginx 转发
三、宝塔站点配置
步骤 1:宝塔添加站点
域名填:demo.xxx.com
- PHP 版本:纯静态
- 数据库:不创建
- SSL:在宝塔申请免费证书(https 由宝塔处理)
步骤 2:网站配置→反向代理
① HTTP 配置(宝塔 Nginx 配置文件)
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}② HTTPS 配置(开启 SSL 后,伪静态 / 配置)
宝塔开启 SSL 后,默认 443 监听,继续用上面反向代理代码,完整 HTTPS 模板:
server
{
listen 80;
server_name demo.xxx.com;
# http强制跳转https(可选)
return 301 https://$host$request_uri;
}
server
{
listen 443 ssl http2;
server_name demo.xxx.com;
ssl_certificate /www/server/panel/vhost/cert/demo.xxx.com/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/demo.xxx.com/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}四、Docker 连接数据库两种方案
方案 A:Docker 项目使用宝塔本地 MySQL(推荐省事)
宝塔 MySQL 开放内网访问,Docker 内数据库配置:
数据库地址:宿主机内网IP(如172.17.0.1或服务器本机IP) 端口:3306 账号密码:宝塔创建的数据库账号
方案 B:Docker 自建 MySQL 容器
docker run -d --name mysql-demo \ -p 127.0.0.1:3307:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7
项目数据库配置:127.0.0.1:3307
五、多个 Docker 站点复用模板
| 域名 | Docker 本机端口 |
|---|---|
| a.xxx.com | 8081 |
| b.xxx.com | 8082 |
| 每个域名单独建宝塔站点,反向代理对应本机端口即可。 |
六、常见问题修复
- 后端获取不到真实访客 IP:配置里必须带
X-Real-IP、X-Forwarded-For - 项目跳转 http/https 错乱:添加
proxy_set_header X-Forwarded-Proto $scheme; - 外网可以直接访问 8081 端口:启动容器必须写
127.0.0.1:8081:80,不能只写8081:80
七、如果你是 PHP 容器(fpm 模式)
宝塔 Nginx 不反向代理 http,反向代理 fpm 端口,示例容器: -p 127.0.0.1:9001:9000 宝塔站点 PHP 改为「调用自定义 FPM」:127.0.0.1:9001

