我该如何在Portia Spider的端口上运行它?

时间:2019-06-25 10:02:58

标签: python docker scrapy portia

我正在尝试在其docker版本中运行带有portia的Spider,但我不想使用docker exec ... portiacrawl ...之类的终端命令来执行Spider。通过在本地主机端口发出请求并将其保存在特定文件夹中,有什么方法可以运行已经创建的蜘蛛?

类似: https://localhost:9001/execute/spider_name/folder_path

我自己的用法示例:

首先,我要做的是运行容器并使它保持运行状态,因为由于其他原因我无法将其停止:

docker run -i -t -d --rm -v <PROJECTS_FOLDER>:/app/data/projects:rw -p 9001:9001 scrapinghub/portia

接下来,我执行portiacrawl:

docker exec <CONTAINER_ID> portiacrawl <PROJECT_NAME_PATH> <SPIDER_NAME> -o /some/path/in/my/pc/<SPIDER_NAME>.json

现在,我要用对正在运行的localhost服务器的som http请求替换docker exec步骤。

非常感谢您的时间

1 个答案:

答案 0 :(得分:0)

是的,您可以进行端口映射。启动docker容器时,除非您告知docker,否则您将不会公开发布任何端口或在内部公开任何端口。

例如:

  • 如果您希望在内部公开端口(在docker网络本身内部,则需要在dockerfile中添加EXPOSE

  • 如果您希望公开发布可通过localhost或公共ip访问的端口,则可以使用-p选项并传递端口,因此在您的情况下将如下所示:< / p>

docker run -p 9001:9001 imagename

上面的命令将告诉docker,您想要进行从9001(使用localhost或任何其他接口)到9001(在容器内部的端口映射,您可以根据实际设置更改端口)。

如果只希望将其公开给localhost,则可以将命令更改为以下内容:

docker run -p 127.0.0.1:9001:9001 imagename

有关更多信息,请检查the following docs


根据更新后的问题,另一种最安全的方法是在portiacrawl内实现一个API,该API可以通过HTTP调用以执行所需的任务,而不是使用docker exec