🐳 在 PyCharm 中创建并运行 Docker 容器完整指南
🎯 本文目标
手把手教你:
- 在 PyCharm 中配置 Docker 环境
- 编写
Dockerfile和requirements.txt - 构建镜像并运行容器
- 解决常见报错(如 requirements.txt 逗号、标签缺失等)
- 查看镜像与容器状态(Docker Desktop)
📁 项目结构
你的项目目录应包含以下文件:
pythonproject/ ├── Dockerfile ├── main.py ├── requirements.txt └── (可选) .python-version📝 准备项目文件
1.requirements.txt
fastapi==0.116.1 flask==3.1.3 mcp==1.28.0 pydantic~=2.13.4 uvicorn~=0.35.0⚠️注意:不要加行尾逗号!否则 pip 会报错:
ERROR: Invalid requirement: 'fastapi==0.116.1,' (from line 1 of requirements.txt)
另外,如果你的本地环境有pywin32,不要把它写进 requirements.txt。因为pywin32只能在 Windows 上安装,而 Docker 容器是 Linux 环境,会导致构建失败:
ERROR: Could not find a version that satisfies the requirement pywin32==3122.main.py
print("Hello from pythonproject!")3.Dockerfile
# 1. 使用官方轻量级 Python 镜像 FROM python:3.11-slim # 2. 设置工作目录 WORKDIR /app # 3. 先复制依赖文件(利用缓存加速构建) COPY requirements.txt . # 4. 安装依赖(使用清华源加速) RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 5. 复制项目源码(包括 main.py 和其他文件) COPY . . # 6. 声明暴露端口 EXPOSE 8000 # 7. 运行命令 CMD ["python", "main.py"]💡提示:如果你未来要跑 FastAPI/Uvicorn,记得把第 21 行改成:
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
🚀 步骤一:构建 Docker 镜像
打开 PyCharm 底部的Terminal(终端),确保你在项目根目录,然后执行:
docker build-t my-main-app:1.0.构建过程会输出每一步的执行结果,最终看到以下信息说明构建成功:
Step 7/7 : CMD ["python", "main.py"] ---> Running in bfe1710a3799 ---> Removed intermediate container bfe1710a3799 ---> 9c2fe8b20419 Successfully built 9c2fe8b20419 Successfully tagged my-main-app:1.0🔍 步骤二:查看镜像是否构建成功
方法一:命令行
docker images你会看到:
REPOSITORY TAG IMAGE ID CREATED SIZE my-main-app 1.0 9c2fe8b20419 2 minutes ago 180MB python 3.11-slim xxxxxxxxxxxx 1 week ago 110MB方法二:Docker Desktop 图形界面
打开 Docker Desktop → 左侧菜单点击Images→ 你会看到刚才构建的my-main-app镜像。
▶️ 步骤三:运行容器
在终端中执行:
docker run-p 8000:8000 my-main-app:1.0✅ 成功输出:
Hello from pythonproject!💡注意:如果你没加
:1.0,Docker 默认找latest标签,会报错:Unable to find image 'my-main-app:latest' locally✅ 解决方案:要么指定
:1.0,要么重新打包时加:latest:docker build-t my-main-app:latest.
注意(*******)
为什么要学两种启动方式?
docker run:适合单个容器(如你现在这个 Python 脚本)
docker compose up -d:适合多容器项目(如 Web 服务 + 数据库)
如果你以后拉取一个完整的 Web 项目,发现根目录有 compose.yaml,那就不要再一个个 docker run了,直接:
docker compose up -d
一条命令,全部启动 ✅
🧹 步骤四:清理无用容器
Docker Desktop 中可能会有一些"示例容器"(如practical_goldstine、bold_satoshi),它们是 Docker 安装时自带的 Demo,可以安全删除。
命令行清理:
docker container prune# 或更彻底:docker system prune🧪 进阶:改造成 FastAPI Web 服务
如果你想让main.py变成一个真正的 Web 服务,修改main.py:
fromfastapiimportFastAPI app=FastAPI()@app.get("/")defread_root():return{"message":"Hello from FastAPI!"}然后修改Dockerfile第 21 行:
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]重新构建并运行:
docker build-t my-main-app:1.0.docker run-p 8000:8000 my-main-app:1.0浏览器访问:http://localhost:8000→ 看到 JSON 响应即成功!
📌 常见问题 & 解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
Invalid requirement: 'fastapi==0.116.1,' | requirements.txt 行尾多了逗号 | 删除所有行尾逗号 |
Could not find a version that satisfies the requirement pywin32==312 | pywin32只能在 Windows 上装,Docker 是 Linux | 从 requirements.txt 中删除pywin32 |
Unable to find image 'my-main-app:latest' | 本地镜像标签是1.0,不是latest | 命令中指定:1.0,或重新打包为:latest |
| 容器运行后立即退出 | main.py是打印语句,执行完就结束 | 正常行为,如需持续运行请用uvicorn或while True |
🎁 附加技巧:导出镜像为文件
如果你想把镜像拷贝给别人或在其他机器上运行:
docker save my-main-app:1.0-o my-main-app.tar导入:
docker load-i my-main-app.tar✅ 总结
你刚刚完成了:
- ✅ 编写 Dockerfile 和 requirements.txt
- ✅ 构建镜像
my-main-app:1.0 - ✅ 运行容器并看到输出
- ✅ 使用 Docker Desktop 查看镜像与容器
- ✅ 解决常见报错(逗号、标签、pywin32)
你已经正式迈入Docker 时代!🎉
📚 下一步学习建议
- 用
docker-compose管理多容器(如 Python + MySQL) - 学习如何挂载卷(Volume)实现代码热更新
- 尝试将镜像推送到 Docker Hub
- 学习
.dockerignore优化构建速度