0

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

类似于: 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

现在,我想要的是用对正在运行的本地主机服务器的 som http 请求替换 docker exec 步骤。

非常感谢你花时间陪伴

4

1 回答 1

0

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

例如:

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

  • 如果您希望公开发布可以通过 localhost 或公共 ip 访问的端口,您可以使用-p选项以及传递端口,因此在您的情况下它将是这样的:

docker run -p 9001:9001 imagename

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

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

docker run -p 127.0.0.1:9001:9001 imagename

有关更多信息,请查看以下文档


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

于 2019-06-25T10:40:40.653 回答