我正在尝试在其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步骤。
非常感谢您的时间
答案 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