最近在倒腾 pyspider,不得不说这个爬虫框架用起来真的很方便。从编写调试到部署一条龙服务, 对于我这种 Scrapy 苦手来说,简直就是救星。另外 pyspider 还提供了 Docker 镜像,通过 Docker 部署省去了安装依赖的麻烦。不过我实际根据官方文档尝试 Docker Compose 部署的时候还是遇到了一点小麻烦,搜索折腾了一番之后总算弄好了,这里做个记录。

ImportError: No module named MySQLdb

执行 docker-compose up 的时候,报了这个错误,解决方法是安装 MySQL-python。

# Dockerfile
FROM binux/pyspider:latest
RUN pip install MySQL-python

这里大家可以自己通过上面的 Dockerfile build 一个新的镜像,或者也可以直接使用我上传的镜像kuma1430/pyspider。然后把官方的 docker-compose.yml 里的 binux/pyspider 换成你创建的镜像名或者 kuma1430/pyspider。

Authentication plugin ‘caching_sha2_password’ cannot be loaded

通过上面安装 MySQL-python,我们解决了找不到 MySQLdb 的问题,但是新的问题出现了:

sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory") (Background on this error at: http://sqlalche.me/e/e3q8)

这里只要把 docker run --name mysql -d -v /data/mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:latest 里的 mysql:latest 改为 mysql:5.7 就行了。

这时候重新执行 docker-compose up,pyspider 应该就能成功运行了。如果这时候出现什么 MYSQL_ALLOW_EMPTY_PASSWORD 或者找不到 ‘taskdb’ 等类似提示,只要把 /data/mysql 下的数据都删除然后重启 mysql 容器就行了。

参考资料