背景

为了业务需要,手动搭建一个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:
  1. # 新建文件Dockerfile,填入以下内容:
  2. FROM binux/pyspider
  3. RUN pip install MySQL-python
  4. VOLUME ["/opt/pyspider"]
  5. ENTRYPOINT ["pyspider"]
  6. EXPOSE 5000 23333 24444 25555
  7. # 执行以下命令:
  8. 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 建下面:
  1. ##file_name: docker-compose.yml
  2. ### 不要随意改动:
  3. version: "3"
  4. services:
  5. phantomjs:
  6. image: binux/pyspider:my
  7. command: phantomjs
  8. result:
  9. image: binux/pyspider:my
  10. links:
  11. - mysql
  12. - rabbitmq
  13. command: result_worker
  14. processor:
  15. image: binux/pyspider:my
  16. links:
  17. - mysql
  18. - rabbitmq
  19. command: processor
  20. fetcher:
  21. image: binux/pyspider:my
  22. links:
  23. - phantomjs
  24. - rabbitmq
  25. command: fetcher
  26. scheduler:
  27. image: binux/pyspider:my
  28. links:
  29. - mysql
  30. - rabbitmq
  31. command: scheduler
  32. webui:
  33. image: binux/pyspider:my
  34. links:
  35. - scheduler
  36. - phantomjs
  37. - mysql
  38. - rabbitmq
  39. command: webui
  40. ports:
  41. - "5000:5000"
  42. mysql:
  43. image: mysql:5.6
  44. restart: always
  45. environment:
  46. MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  47. rabbitmq:
  48. image: rabbitmq:latest
  49. restart: always
  50. networks:
  51. default:
  52. external:
  53. name: nginx-proxy
  • 执行 docker-compose up ,访问 http://ip:5000 出现图形界面:成功;

参考文档: