## 一、教程说明

### 适用场景

新手在Linux服务器(宝塔面板)上,通过Docker快速搭建隔离的Python 3.14运行环境,实现「IP+端口」访问,并绑定腾讯云域名(替代IP+端口),兼顾环境隔离性与访问便捷性。

### 核心成果

- 搭建Python 3.14-slim轻量环境,端口映射「8889(主机)→8888(容器)」,实现外网访问通路

- 项目目录持久化(服务器`/www/wwwroot/python_demo` ↔ 容器`/app`),避免容器删除导致代码丢失

- 完成腾讯云域名绑定,支持HTTPS加密访问,替代繁琐的「IP+端口」访问方式

## 二、前置准备

1. 服务器:已安装宝塔面板,且Docker管理器已部署(宝塔「软件商店」搜索「Docker管理器」,点击一键安装即可);

2. 域名:腾讯云注册的域名(如`python-demo.com`),确保域名已完成实名认证(国内服务器必备);

3. 工具:服务器终端(可使用宝塔内置SSH终端、Finalshell、Xshell等工具,用于执行Docker命令)。

## 三、环境搭建步骤

### 步骤1:创建Python项目目录(服务器端)

在服务器创建专属项目目录,用于存放Python代码,后续与Docker容器挂载实现代码同步,操作如下:

```bash

# 服务器终端执行,创建目录(递归创建,避免路径不存在报错)

mkdir -p /www/wwwroot/python_demo

# 验证目录是否创建成功

ls /www/wwwroot | grep python_demo

```

✅ 执行后输出`python_demo`,说明目录创建成功;若无输出,检查命令是否输错或权限是否足够。

### 步骤2:Docker命令创建Python 3.14容器

使用单行Docker命令创建稳定运行的Python 3.14容器,规避「bash启动后退出导致的重启循环」问题,直接复制执行即可:

```bash

# 服务器终端执行(完整复制,一次性运行)

docker run -d --name python314-app -p 8889:8888 -v /www/wwwroot/python_demo:/app --restart always python:3.14-slim tail -f /dev/null

```

#### 命令参数说明

|参数|作用|

|---|---|

|`docker run -d`|以后台守护进程模式创建并运行容器,避免终端关闭后容器停止|

|`--name python314-app`|为容器命名,便于后续管理(可自定义,如`python-app-314`)|

|`-p 8889:8888`|端口映射:将主机8889端口与容器8888端口绑定,外网通过主机8889端口访问容器|

|`-v /www/wwwroot/python_demo:/app`|目录挂载:服务器`python_demo`目录与容器`/app`目录同步,实现代码持久化|

|`--restart always`|容器意外停止(如服务器重启、进程崩溃)后自动重启,保障服务稳定性|

|`python:3.14-slim`|基于Python 3.14轻量镜像创建容器,体积小、资源占用低,适合生产环境|

|`tail -f /dev/null`|让容器长期后台运行,替代`bash`(避免无交互时bash退出触发重启循环)|

### 步骤3:验证容器与Python环境

#### 3.1 检查容器运行状态

```bash

# 服务器终端执行,筛选目标容器状态

docker ps | grep python314-app

```

✅ 正常输出示例(状态为「Up」,说明容器稳定运行):

```Plain Text

c9bc79672f1e   python:3.14-slim   "tail -f /dev/null"   1分钟前   Up 59秒   0.0.0.0:8889->8888/tcp   python314-app

```

❌ 若无输出:执行`docker ps -a | grep python314-app`查看容器是否停止,重启容器即可(`docker start python314-app`)。

#### 3.2 进入容器验证Python版本

```bash

# 服务器终端执行,进入容器终端

docker exec -it python314-app bash

# 容器内执行,验证Python版本

python --version

```

✅ 输出`Python 3.14.2`(或对应小版本),说明Python环境部署成功;容器终端提示符会变为`root@容器ID:/#`,表示已进入容器。

### 步骤4:启动Python测试项目(验证访问通路)

在容器内创建测试项目,验证「容器→主机→外网」的访问通路是否通畅:

```bash

# 容器内执行,进入挂载的项目目录

cd /app

# 安装Flask(测试用依赖,可替换为项目实际依赖)

pip install flask

# 创建测试文件app.py(自动写入代码,无需手动编辑)

cat > app.py << EOF

from flask import Flask

app = Flask(__name__)

@app.route('/')

def hello():

    return "✅ Python 3.14容器搭建成功!端口映射:8889(主机) → 8888(容器)目录挂载:服务器/python_demo → 容器/app"

if __name__ == '__main__':

    # 核心配置:host=0.0.0.0(允许外网访问),port=8888(与容器端口一致)

    app.run(host='0.0.0.0', port=8888, debug=False)

EOF

# 启动测试项目(前台运行,可查看访问日志)

python app.py

```

✅ 启动成功输出(确认服务已监听容器8888端口):

```Plain Text

 * Serving Flask app 'app'

 * Debug mode: off

WARNING: This is a development server. Do not use it in a production deployment.

 * Running on all addresses (0.0.0.0)

 * Running on http://127.0.0.1:8888

 * Running on http://172.17.0.2:8888

Press CTRL+C to quit

```

#### IP+端口访问测试

1. 宝塔面板 → 【安全】→ 【防火墙】→ 找到「8889」端口,点击「放行」(允许外网访问该端口);

2. 本地浏览器输入:`服务器公网IP:8889`(如`123.45.67.89:8889`);

3. 页面显示测试提示语,说明外网可通过IP+端口访问容器内项目。

### 步骤5:腾讯云域名解析(绑定域名前置操作)

将腾讯云域名指向服务器公网IP,使域名能映射到服务器,操作如下:

1. 登录[腾讯云控制台](https://console.cloud.tencent.com/) → 顶部搜索「域名管理」→ 进入域名列表,找到目标域名(如`python-demo.com`);

2. 点击域名右侧「解析」,进入解析配置页面,点击「添加记录」,分两条配置A记录(分别对应主域名和WWW域名):

|配置项|主域名配置(@)|WWW域名配置(www)|说明|

|---|---|---|---|

|记录类型|A|A|用于将域名指向IPv4地址(服务器公网IP)|

|主机记录|@|www|@对应`python-demo.com`,www对应`www.python-demo.com`|

|记录值|服务器公网IP|服务器公网IP|在腾讯云服务器控制台可查询公网IP|

|TTL|600(默认)|600(默认)|解析生效时间,数值越小生效越快,腾讯云最快1分钟内生效|

1. 点击「保存」,等待5-10分钟让解析生效,验证方法:

```bash

# 本地CMD(Windows)或终端(Mac/Linux)执行

ping python-demo.com

```

✅ 若返回的IP是服务器公网IP,说明域名解析生效。

### 步骤6:宝塔配置反向代理(域名绑定核心步骤)

通过宝塔Nginx反向代理,将域名请求转发到主机8889端口,实现域名访问容器内项目,无需手动配置Nginx配置文件。

#### 6.1 确认Nginx已安装(宝塔自带)

宝塔面板默认自带Nginx,无需手动下载,验证方法:

```bash

# 服务器终端执行,查看Nginx版本

nginx -v

```

✅ 输出`nginx version: nginx/1.24.0`(或其他稳定版本),说明已安装;

❌ 若提示「command not found」:宝塔【软件商店】搜索「Nginx」,点击「一键安装」,1-2分钟即可完成部署。

#### 6.2 添加站点(绑定域名)

1. 宝塔面板 → 【网站】→ 【添加站点】;

2. 填写站点配置(关键项已标注):

       

    - 域名:输入目标域名(如`python-demo.com`,按回车换行添加`www.python-demo.com`,同时绑定两个域名);

    - 根目录:选择`/www/wwwroot/python_demo`(与容器挂载目录一致,规范路径配置);

    - PHP版本:选择「纯静态」(Python项目不依赖PHP,避免Nginx解析干扰);

    - 数据库:无需创建(Python项目自行配置数据库连接);

3. 点击「提交」,宝塔自动生成Nginx站点配置文件。

#### 6.3 配置反向代理

1. 进入刚创建的站点 → 点击顶部「设置」→ 左侧导航「反向代理」→ 点击「添加反向代理」;

2. 填写反向代理配置:

       

    - 代理名称:自定义(如「Python-app」,便于识别);

    - 目标URL:填写`http://127.0.0.1:8889`(核心!指向容器映射的主机8889端口);

    - 其他配置保持默认,点击「提交」→ 「保存」。

3. 重启Nginx使配置生效:宝塔【软件商店】→ 找到「Nginx」→ 点击「重启」。

#### 域名访问测试

本地浏览器输入域名(如`python-demo.com`),若显示Python测试项目提示语,说明域名绑定成功,可替代IP+端口访问。

### 步骤7:配置HTTPS(可选,推荐)

为域名配置免费SSL证书,实现HTTPS加密访问,提升安全性,操作如下:

1. 进入站点设置 → 左侧「SSL」→ 证书类型选择「Let's Encrypt」;

2. 勾选需要加密的域名(`python-demo.com`、`www.python-demo.com`);

3. 点击「申请」,宝塔自动完成域名验证、证书申请与安装;

4. 申请成功后,勾选「强制HTTPS」(所有HTTP访问自动跳转到HTTPS,避免混合访问)。

✅ 测试:浏览器输入`https://python-demo.com`,地址栏显示小锁图标,说明HTTPS配置生效。

## 四、常见问题与解决方案

### 问题1:容器陷入重启循环,无法进入终端

❌ 错误提示:`Error response from daemon: Container xxx is restarting, wait until the container is running`

🔍 原因:容器启动命令使用`bash`,无交互时bash自动退出,触发`--restart always`重启规则。

💡 解决方案:删除旧容器,重新创建(使用`tail -f /dev/null`启动命令):

```bash

# 停止并删除旧容器

docker stop python314-app && docker rm python314-app

# 重新创建稳定容器

docker run -d --name python314-app -p 8889:8888 -v /www/wwwroot/python_demo:/app --restart always python:3.14-slim tail -f /dev/null

```

### 问题2:访问域名显示404/宝塔默认页

🔍 原因:反向代理配置错误、域名解析未生效、80/443端口未放行。

💡 解决方案:

1. 检查反向代理目标URL:确认是`http://127.0.0.1:8889`,而非容器端口8888;

2. 验证域名解析:执行`ping 域名`,确认返回服务器公网IP,若未生效等待5-10分钟;

3. 放行端口:宝塔【安全】→ 防火墙,确保80(HTTP)、443(HTTPS)、8889端口已放行;

4. 重启Nginx:宝塔【软件商店】→ Nginx → 重启,刷新配置。

### 问题3:容器内执行`ld`/`gcc`提示「command not found」

🔍 原因:`python:3.14-slim`是轻量镜像,精简了编译工具和系统依赖,仅保留Python运行核心组件。

💡 解决方案:

- 无需处理:仅运行Python项目(无编译需求)时,不影响使用;

- 安装依赖:若需安装需编译的Python包(如`mysqlclient`、`psycopg2`),容器内执行:

```bash

apt update && apt install -y gcc python3-dev

```

### 问题4:浏览器访问「IP:8889」提示无法访问

🔍 原因:容器未启动、项目未运行、8889端口未放行、服务器安全组未配置。

💡 解决方案:

1. 检查容器状态:`docker ps | grep python314-app`,确保状态为「Up」;

2. 确认项目运行:进入容器,执行`ps aux | grep python`,确保`python app.py`进程存在;

3. 放行端口:宝塔防火墙放行8889端口,腾讯云服务器安全组入站规则放行8889端口。

## 五、常用Docker管理命令(后续维护)

```bash

# 停止容器(修改配置时使用)

docker stop python314-app

# 启动容器

docker start python314-app

# 重启容器

docker restart python314-app

# 删除容器(需先停止,谨慎操作)

docker rm python314-app

# 查看容器运行日志(排查项目启动错误)

docker logs python314-app

# 后台启动Python项目(容器内,关闭终端不停止)

cd /app && nohup python app.py > app.log 2>&1 &

# 查看容器内后台运行的Python进程

ps aux | grep python

# 退出容器终端(不停止容器)

exit

```

## 六、教程总结

1. 核心流程:创建项目目录 → Docker创建Python容器 → 验证环境与访问通路 → 腾讯云域名解析 → 宝塔反向代理 → (可选)HTTPS配置;

2. 关键注意点:

       

    - 容器启动命令必须用`tail -f /dev/null`,避免重启循环;

    - Python项目启动时`host=0.0.0.0`,否则仅容器内可访问;

    - 反向代理目标URL指向主机8889端口,而非容器8888端口;

    - 域名解析后需等待生效,端口放行要兼顾宝塔防火墙与服务器安全组。

3. 优势:Docker实现环境隔离,可同时部署多版本Python项目;域名+HTTPS访问更友好、更安全,符合生产环境规范。

> (注:文档部分内容可能由 AI 生成)

更多推荐