Docker не сохраняет выходной файл из Scrapy spider

#python #docker #scrapy #dockerfile

#python #docker #scrapy #dockerfile

Вопрос:

У меня проблема с Scrapy внутри Docker. В docker мой spider не сохраняет выходной файл с результатами.

Это скрипт, который я запускаю для запуска spider:

 from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from CARS_PL_source_1 import CARSPLsource1Spider

if __name__ == "__main__":
    process = CrawlerProcess(get_project_settings())
    process.crawl(CARSPLsource1Spider)
    process.start()
 

Внутри моего конвейера у меня есть этот код для сохранения выходных данных:

 from scrapy.exporters import JsonItemExporter


class JsonPipeline(object):
    def __init__(self):
        self.file = open("file.json", 'wb', buffering=0)
        self.exporter = JsonItemExporter(self.file, encoding='utf-8', ensure_ascii=False)
        self.exporter.start_exporting()

    def process_item(self, item, spider):
        self.exporter.export_item(item)
        return item

    def close_spider(self, spider):
        self.exporter.finish_exporting()
        self.file.close()
 

И мой файл docker выглядит следующим образом:

 FROM python:3

WORKDIR /usr/src/app
 
COPY car_prices_tool_scrapy/requirements.txt ./
 
RUN pip3 install --no-cache-dir -r requirements.txt

COPY car_prices_tool_scrapy .
 
CMD [ "python", "spiders/run_CARS_PL_source_1.py" ]
 

Без docker spider сохраняет этот файл.json. И во время работы в docker я вижу, что spider работает и получает результаты в журналах, но я нигде не получаю свой файл.

Когда я это делаю docker diff , я получаю много временных файлов, файлов pycache и т. Д., Но Этот файл.json нигде не видно.

Что я делаю не так?

Комментарии:

1. Как вы запускаете свой контейнер? Точная docker run ... команда. Если вы не подключаете локальный том к контейнеру, file.json он теряется после выхода из контейнера.

2. На этот раз я запустил его с помощью этой команды: docker run -d --name devtest -v myvol2:/app source_1 но после того, как я это сделал docker diff , все еще перечислены только те pycache и другие временные файлы без json.

3. Ваш выходной json, вероятно, записан внутри контейнера docker. Из dockerfile рабочий каталог /usr/src/app, который не смонтирован в вашей команде запуска docker.

4. Извините, я бы сказал, я изучаю docker «на лету». Прямо сейчас я запустил свой скрипт совершенно по-другому. Я ввел docker start devtest тогда docker exec -it devtest bash и тогда python run_CARS_PL_source_1.py . Я смог просмотреть все мои файлы из scrapy, мой requirements.txt файл и т.д. Но все же после запуска скрипта я все еще не могу найти json. Должно быть, я допустил какую-то ошибку?