Docker部署Python爬虫:从零学会用Docker部署
如果你是刚接触服务器运维的新手,想把自己的Python爬虫放到Docker里运行,这篇文章正好适合你。
我会从零开始,用最简单的步骤讲清楚怎么用Docker部署Python爬虫,全程有命令、有配置、有坑点提醒,你照着做就能跑起来。
前置准备
在动手之前,先确认你的服务器或本地电脑满足以下几个条件:
- 已经安装Docker。没装的话执行以下命令一键安装(CentOS/Ubuntu通用):
curl -fsSL https://get.docker.com | bash- 有个最简单的Python爬虫脚本。哪怕只爬一个网页标题都行,后面我们会一步步改造它。
- 确保服务器能正常访问外网(如果是国内服务器,后面会给你换国内镜像源的命令)。
所有操作都在命令行完成,不用装宝塔或面板。
分步操作
第一步:准备项目目录与爬虫文件
在服务器上新建一个文件夹,例如 my-crawler,然后进入该目录:
mkdir my-crawler && cd my-crawler创建一个最简单的爬虫文件 crawler.py,内容如下:
# crawler.py
import requests
from bs4 import BeautifulSoup
url = "https://httpbin.org/anything" # 一个能正常返回数据的网站
try:
resp = requests.get(url, timeout=5)
soup = BeautifulSoup(resp.text, 'html.parser')
print(f"成功获取页面,状态码:{resp.status_code}")
print(f"页面HTML长度:{len(resp.text)}")
except Exception as e:
print(f"出错了:{e}")
注意:这个脚本用了requests和beautifulsoup4,你需要一个依赖清单。
第二步:编写依赖文件 requirements.txt
在同一个目录下创建 requirements.txt,写入:
requests
beautifulsoup4第三步:编写Dockerfile
创建一个没有后缀的文件 Dockerfile(注意首字母大写),内容如下:
# 基于Python官方轻量镜像
FROM python:3.9-slim
设置工作目录
WORKDIR /app
复制依赖文件并安装
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
复制爬虫脚本
COPY crawler.py ./
容器启动时执行爬虫
CMD ["python", "crawler.py"]
这里用了清华大学的pip镜像源,国内服务器安装会快很多。如果你在国外服务器,去掉 -i 部分即可。第四步:构建Docker镜像
执行构建命令,给镜像取个名字(这里叫 my-crawler):
docker build -t my-crawler .等待几分钟,看到 Successfully tagged my-crawler:latest 说明构建成功。
第五步:运行容器并查看输出
直接用以下命令运行:
docker run --rm my-crawler参数 --rm 表示容器运行结束后自动删除,避免残留容器。
运行后你应该会看到类似下面的输出:
成功获取页面,状态码:200
页面HTML长度:342如果你的爬虫脚本需要访问本地文件或数据库,还可以用 -v 挂载目录,比如:
docker run --rm -v /宿主机路径:/app/output my-crawler避坑指南
常见报错1:pip install 超时或失败
- 原因:默认pip源在国外,国内服务器下载慢。
- 解决:在Dockerfile里加上国内镜像源,比如清华、阿里、中科大。上面已经示范了。
常见报错2:容器内无法访问外网
- 原因:Docker默认使用桥接网络,有时候DNS解析有问题。
- 解决:运行容器时添加
--dns 8.8.8.8或--network host共享宿主机网络。
常见报错3:docker build 时找不到文件
- 原因:
Dockerfile里的COPY路径不对,或者当前目录下没有对应文件。 - 解决:执行
ls确认crawler.py和requirements.txt存在,并且和Dockerfile在同一目录。
高频问题解答
Q1:容器运行后为什么看不到任何输出?
A:可能是因为你没有加 --rm 或 -it。
如果想实时看输出,可以用 docker run -it --rm my-crawler。
或者等容器停止后,用 docker logs 容器ID 查看。
Q2:爬虫的结果怎么保存到宿主机上?
A:在 Dockerfile 里让爬虫把结果写到 /app/output 目录,然后运行容器时用 -v 将宿主机目录挂载进去。
例如:docker run --rm -v /data/result:/app/output my-crawler。
Q3:每次修改爬虫都要重新构建镜像吗?
A:不是必须。
你可以改完 crawler.py 后,重新执行 docker build 构建新镜像,然后运行新容器。
但更高效的做法是把爬虫代码放在宿主机,通过 -v 挂载进去,这样无需重建镜像。
效果验证
按照上面的步骤操作完成后,用以下两个方法确认你的Docker部署Python爬虫正常工作:
- 查看容器运行日志。如果有输出“成功获取页面”说明爬虫正常执行。
- 检查挂载目录(如果你做了数据持久化),确认结果文件已经生成。
如果想测试更复杂的爬虫(比如定时运行),
可以结合 cron 或 systemd timer 来定期执行 docker run,
或者用 docker-compose 加 restart=always 保持容器长期运行。
如果你在处理Docker部署Python爬虫时遇到其他问题,建议先回看上面的避坑部分,再结合错误提示排查。
记住,把环境问题想清楚再动手,能省一半的时间。