Сохраните файл csv очищенных данных из контейнера докеров на локальный хост

Я запускаю веб-скребок Python для сбора статей с разных веб-сайтов, которые затем сохраняю в виде файлов csv. Я запускал их вручную, но недавно пытался запустить их в облачной оболочке Google. У меня были некоторые проблемы с зависимостями, поэтому я решил создать образ докера для запуска моего парсера Python.

На данный момент мне удалось создать Dockerfile, который я использую для создания контейнера со всеми необходимыми зависимостями.

FROM python:3
# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
RUN pip install lxml
COPY Fin24 ./Fin24
COPY scraped_list.csv ./scraped_list.csv

# Run fin24.py when the container launches
CMD ["python3", "fin24.py"]

fin24.py содержит мой парсер. Fin24 — это текстовый файл, который содержит все базовые URL-адреса, которые мой парсер сканирует в поисках ссылок на статьи, прежде чем переходить к каждой статье и извлекать контент. scraped_list.csv содержит все предыдущие веб-сайты, которые я очистил, и мой скрипт Python проверяет их, чтобы убедиться, что я снова не очистил ту же статью.

После запуска вышеуказанного я вижу, что это работает. Сценарий Python останавливается после очистки всех найденных веб-сайтов. Однако я предполагаю, что он сохраняет CSV-файл (выходной) внутри контейнера докеров. Как я могу заставить его сохранить его в каталоге, из которого я запускаю докер?

В конечном итоге я хочу просто загрузить Dockerfile в свою облачную оболочку Google, запустить его как cronjob и сохранить все выходные данные внутри оболочки. Любая помощь приветствуется


person matthew matthee    schedule 06.12.2017    source источник
comment
Вы ищете или команду VOLUME? docs.docker.com/engine/reference/builder/#volume   -  person SiKing    schedule 06.12.2017


Ответы (1)


Вам потребуется смонтировать этот путь в развертывании докера. Для этого вам нужно сделать две вещи: 1. Добавить том в свой Dockerfile.

WORKDIR /path/in/container
VOLUME ["/path/in/container"]

2. запустите свой контейнер с опцией -v

docker run -i -t -v /path/on/host:/path/in/container:rw "container name"
person afsd    schedule 06.12.2017
comment
Ок, отлично. Так как именно это будет работать? Могу ли я добавить его в скрипт Dockerfile, как вставлено выше? Функция CMD не выполняет мой скрипт python, когда я запускаю контейнер докеров, который завершается после завершения работы моего скребка. Будут ли тома сохранять выходные данные моего скребка, а затем копировать их обратно на мой путь к хосту? т.е. в /path/on/host - person matthew matthee; 07.12.2017
comment
Привет, извините, что поделился неправильным ответом. Этот конфиг работает, когда мы используем kubernetes для управления докером. Если вы используете контейнер докеров напрямую, вам нужно сделать что-то еще. Я редактирую ответ для этого. - person afsd; 07.12.2017
comment
Кроме того, если вы используете команду VOLUME перед командой CMD, вывод будет записан в ваш рабочий каталог и будет сохранен на пути к хосту. - person afsd; 07.12.2017