Docker搭建Python 3.14运行环境(宝塔+腾讯云域名绑定)基础教程
## 一、教程说明
### 适用场景
新手在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 生成)
更多推荐
所有评论(0)