Как я могу запустить порцию паука по его порту? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь запустить паука с порцией в его версии докера, но я не хочу выполнять паука с помощью терминальной команды, такой как 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

Теперь я хочу заменить шаг docker exec на som http-запрос к работающему локальному серверу.

Большое спасибо за ваше время

1 Ответ

0 голосов
/ 25 июня 2019

Да, вы можете сделать сопоставление портов. При запуске Docker-контейнера у вас не будет публично открытых или открытых внутренних портов, если вы не попросите Docker сделать это.

Например:

  • если вы хотите открыть порт внутри (внутри самой сети Docker, вам нужно добавить EXPOSE в файл Docker)

  • если вы хотите опубликовать порт публично, к которому можно получить доступ либо через 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 внутри portiacrawl, который можно вызывать через HTTP для выполнения необходимых задач вместо использования docker exec

...