【问题标题】:Scrapyd project does not persist between Docker container runsScrapyd 项目不会在 Docker 容器运行之间持续存在
【发布时间】:2018-05-17 20:36:13
【问题描述】:

我有一个运行 Ubuntu 的 Docker 容器,托管在 Windows 10 Pro 上。 Scrapy 和 Scrapyd 软件包已安装在容器中,一切正常。我使用scrapyd-deploy向Scrapyd添加了一个项目Project A,一切都很好。我可以使用 curl 和 schedule.json API 来安排 Project A 的蜘蛛,然后一直爬行直到奶牛回家。

问题是项目 A 在容器运行之间不会持续存在。在奶牛回家后,停止并运行 Ubuntu 容器,Scrapyd 包含 0 个项目,如 listprojects.json 所示。我已尝试提交容器,但项目不存在。

感谢任何帮助!

【问题讨论】:

  • 请将您的问题调整为mcve。您是否在容器上尝试过任何持久性方法?请分享您的撰写文件/ dockerfile 的重要部分,以便我们尝试帮助您。
  • @trust512 感谢您的评论。我假设 Scrapyd 将添加的项目保存到它正在运行的文件系统上的磁盘上,至少它在本机 Windows 上是这样。我已经多次启动和停止在 Ubuntu 容器上运行的 Scrapyd 服务器,并且项目仍然存在。除了我提到的 Docker 提交之外,您能否建议我可以在容器上使用的任何“持久性方法”?
  • 当然我们可以让它持久化,但你需要更具体。你如何运行你的scrapyd
  • 我直接从 bash 运行它
  • 好的,但我的意思是你是像docker run -it scrapyd 一样运行它还是以某种不同的方式运行它?

标签: docker scrapy scrapyd


【解决方案1】:

总结来自 cmets 的讨论。

您必须将两个路径从容器挂载到您的主机系统中才能持久化您的数据。

您可以这样定义挂载:

$ docker run -it -v runtime-storage:/usr/src/app/runtime_storage -v results-storage:/usr/scr/app/results scrapyd-36

docs ref

【讨论】:

  • 也许是一个关于旧问答的愚蠢问题:关于scrapyd,runtime_storageresults_storage 你是在谈论eggs_diritems_dir 吗?我真的更关心你所说的runtime-storage,我在任何地方都找不到引用。
  • 已经有几年了,所以 scrapyd 可能已经改变了它存储数据的位置/方式——因此造成了混乱。他们的 docker hub 页面虽然有了很大的改进,所以我相信你会在hub.docker.com/r/vimagick/scrapyd 示例文件下找到答案 docker-compose.yml :) 希望对您有所帮助
  • 我使用的是旧版本的 scrapyd,所以最初的问题比当前的 vimagick docker 图像更适合我。
  • 酷,IIRC runtime-storage 仅被定义为将应用程序数据保存在一个地方(以防有任何耗时的初始化需要完成),尽管它与问题没有太大关系.重要的是results-storage,这不适合你吗?使用默认配置,一个简单的./data:/var/lib/scrapyd 就足够了,并且可以将内容存储在本地而不是卷中。
猜你喜欢
  • 1970-01-01
  • 2017-04-30
  • 2013-09-19
  • 2011-08-11
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2015-12-31
相关资源
最近更新 更多