用Docker部署Python爬虫,零基础也能按步骤跑起来
用Docker部署Python爬虫,零基础也能按步骤跑起来
很多新手写好了爬虫脚本,却卡在部署这一步——没有对应的Python环境、依赖冲突、服务器配置不对。
其实用 Docker部署Python爬虫 可以完美解决这些问题,把整个运行环境打包成一个容器,无论你的服务器是什么系统,都能一键启动。
下面我按照自己日常运维的习惯,从零开始带你走完整个流程。
为什么选Docker跑爬虫
- 环境隔离:爬虫依赖的库、驱动(比如Selenium + Chrome)不会污染宿主机。
- 快速迁移:换台机器,拉取镜像就跑,不用重新安装。
- 定时稳定:容器重启策略可以保证爬虫掉线后自动拉起来。
如果你手头有个爬虫脚本(比如抓取豆瓣电影Top250),下一步就是把它装进容器。
开始之前:服务器需要准备什么
- 安装Docker(如果是宝塔面板,在软件商店搜Docker管理器安装;命令行安装命令如下):
curl -fsSL https://get.docker.com | sh
sudo systemctl start docker
sudo systemctl enable docker安装完后运行 docker version 确认正常。
- 准备好爬虫代码:假设你的项目结构如下:
crawler/
├── spider.py # 主爬虫文件
├── requirements.txt # 依赖列表(如 requests, beautifulsoup4, selenium)
└── chromedriver # 如果用到浏览器驱动(可选)如果爬虫需要访问外部网站,确保服务器防火墙打开了对应出站端口。
撰写Dockerfile,打包爬虫环境
在项目根目录创建文件 Dockerfile,内容如下(示例基于 Python 3.10):
# 使用官方 Python 镜像
FROM python:3.10-slim
设置工作目录
WORKDIR /app
复制依赖文件并安装(利用缓存层加速)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
复制爬虫代码
COPY . .
声明容器运行时执行的命令
CMD ["python", "spider.py"]
如果用了 Selenium + Chrome,需要额外安装 Chromium 和驱动,可以搜“dockerfile selenium”得到模板。
构建并运行容器
构建镜像
在当前目录(包含Dockerfile)执行:
docker build -t my-crawler:1.0 .等待依赖下载完成,出现 Successfully tagged my-crawler:1.0 即成功。
运行容器一次性测试
docker run --rm -v $(pwd)/output:/app/output my-crawler:1.0--rm表示容器退出后自动删除,适合调试。-v挂载本地output目录到容器内,方便爬虫写入数据到宿主机。
如果爬虫需要长期运行(比如每10分钟抓一次),改用:
docker run -d --name crawler-instance -v $(pwd)/output:/app/output --restart unless-stopped my-crawler:1.0-d 后台运行,--restart 保证容器退出时自动重启。
避坑指南:常见错误与解决
❌ 容器内时间和本地不一致
爬虫依赖时间戳?
在 Dockerfile 或运行命令中加入:
docker run -e TZ=Asia/Shanghai ...或者在 Dockerfile 中设置 ENV TZ=Asia/Shanghai。
❌ 依赖安装失败(如 Pillow, lxml)
Python 基础镜像缺少编译工具,
换用 python: 或
3.10-slim-busterpython:,
3.10-bullseye
或者在 Dockerfile 里提前安装 build-essential:
RUN apt-get update && apt-get install -y build-essential libxml2-dev libxslt1-dev && rm -rf /var/lib/apt/lists/*❌ 网络请求超时或IP被封
容器内IP是独立出口,建议使用代理或轮换IP。
可以在运行命令中设置环境变量:
docker run -e HTTP_PROXY=http://your-proxy:port ...❌ 爬虫代码写死了文件路径
容器内的路径是 /app,务必使用相对路径或从环境变量读取。
推荐在脚本中写:
import os
output_dir = os.environ.get('OUTPUT_DIR', '/app/output')然后在运行命令时通过 -e OUTPUT_DIR=/app/output 或挂载卷覆盖。
如何验证爬虫是否正常运行
- 查看容器日志:
docker logs -f crawler-instance可以看到爬虫的打印输出,判断抓取进度。
- 检查输出文件:在宿主机
./output/文件夹下应该能看到生成的数据(如movies.csv)。 - 查看容器状态:
docker ps -a | grep crawler-instance状态应为 Up(运行中)或 Restarting(表示重启策略生效)。
- 监控资源占用:
docker stats crawler-instance查看CPU和内存使用是否正常,如果突高说明爬虫逻辑可能有问题。
高频问题解答
Q:爬虫需要定时执行,怎么实现?
A:在宿主机使用 crontab,写一行 0 */2 * * * docker start crawler-instance(前提是容器已经停止);或者直接在容器内写循环休眠,配合 --restart unless-stopped 持续运行。
Q:数据都想保留在宿主机,怎么操作?
A:使用 -v 挂载卷,如上文所示。注意容器内写入路径与挂载路径一致。
Q:爬虫依赖数据库如 MongoDB,如何连接?
A:将 MongoDB 也部署为 Docker 容器,使用 --link(不推荐)或创建自定义网络 docker network create crawler-net,两个容器都加入该网络,通过容器名通信。
最后
如果你正在处理 Docker部署Python爬虫,建议先按本文步骤完整执行一遍,跑通最基本的示例,再根据自己的爬虫需求调整 Dockerfile 和运行参数。
遇到异常时优先回看避坑和高频问题部分,大部分新手问题都能在容器日志或官方文档找到答案。
一旦掌握了这套流程,后续批量部署多个爬虫就很容易了。