背景
为了业务需要,手动搭建一个pyspider,因为不想手动安装太多软件,考虑到 官网有释放出了一个可用的docker-compose.yml 配置;
上车
- 碰到问题一: 直接使用官网的docker-compose.yml (http://docs.pyspider.org/en/latest/Running-pyspider-with-Docker/)会碰到:scheduler 启动不起来的问题,使用 docker logs name 可以看到具体的报错信息是: ImportError: No module named MySQLdb
- 解决方式:因为官网的版本,有个模块没安装,重新编译一下image:
# 新建文件Dockerfile,填入以下内容:
FROM binux/pyspider
RUN pip install MySQL-python
VOLUME ["/opt/pyspider"]
ENTRYPOINT ["pyspider"]
EXPOSE 5000 23333 24444 25555
# 执行以下命令:
docker build -t binux/pyspider:my .
- 这样就生成了pyspider的my 标签;把官网的配置里面的: binux/pyspider:latest 全部改成 binux/pyspider:my
- 碰到问题二:提示:docker pyspider “Can’t connect to MySQL server on 172
- 解决方式: 因为官网的docker compose写法是把数据库和queue放外面,而我是放在 docker-compose 配置里面;所以为了确保他们在同一个网络下,我先创建要给网络 (命令行先执行: docker network create nginx-proxy),然后把整个放在里面; docker-compose.yml 建下面:
##file_name: docker-compose.yml
### 不要随意改动:
version: "3"
services:
phantomjs:
image: binux/pyspider:my
command: phantomjs
result:
image: binux/pyspider:my
links:
- mysql
- rabbitmq
command: result_worker
processor:
image: binux/pyspider:my
links:
- mysql
- rabbitmq
command: processor
fetcher:
image: binux/pyspider:my
links:
- phantomjs
- rabbitmq
command: fetcher
scheduler:
image: binux/pyspider:my
links:
- mysql
- rabbitmq
command: scheduler
webui:
image: binux/pyspider:my
links:
- scheduler
- phantomjs
- mysql
- rabbitmq
command: webui
ports:
- "5000:5000"
mysql:
image: mysql:5.6
restart: always
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
rabbitmq:
image: rabbitmq:latest
restart: always
networks:
default:
external:
name: nginx-proxy
- 执行 docker-compose up ,访问 http://ip:5000 出现图形界面:成功;