Невозможно получить выходной файл с данными при создании образа докера из скрипта Python с использованием Docker для Windows - PullRequest
0 голосов
/ 09 января 2019

Я использую Docker для окон с контейнерами Linux, я создал простой скрипт на Python, где мне нужно взять входные данные из 2 текстовых файлов, добавить их и экспортировать в текстовый файл. Ниже приведен код для test_script.py

#including libraries
import pandas as pd
from os import path

#setting path to data
path2data1 = './data1'
path2data2 = './data2'
path2output = './'

#reading input file
input_data1 = pd.read_table(path.join(path2data1,"sample_data_input1.txt"))
input_data2 = pd.read_table(path.join(path2data2,"sample_data_input2.txt"))

#adding both the data
combined_data = input_data1.append(input_data2, ignore_index = True)

#print data in a output file
combined_data.to_csv(path.join(path2output, 'outputdata.csv'), 
                   header=True, index=False, encoding='utf-8')

Теперь я пытаюсь создать докер-контейнер с этим, я хочу просто передать местоположение папки, так как данные постоянно меняются каждый день. Также мне нужен выходной файл после запуска образа докера.

Я написал следующее Dockerfile

# Use an official Python runtime as a parent image
FROM python:3
ENV http_proxy http://proxy-chain.xxx.com:911/
ENV https_proxy http://proxy-chain.xxx.com:912/


COPY . /app
WORKDIR /app/

# Install any needed packages specified
RUN pip install pandas

# Run test_script.py when the container launches
CMD ["python", "test_script.py"] 

Итак, я создаю образ докера, используя docker build -t test_build .. Он успешно строится без каких-либо ошибок.

Я запускаю образ с docker run --volume ./test_script.py:/test_script.py test_build > ./output.txt, затем создается выходной файл, но он становится пустым.

Как я могу получить данные вместе с файлом

1 Ответ

0 голосов
/ 09 января 2019

@ archit, вам нужно прикрепить том к вашему докеру.
Том - это единственный способ сохранить выходной файл, а также способ, которым ваш докер будет запускать входной файл каждый раз, когда вы захотите использовать докер.

docker run \
  -v host_volume:/app \
  test_build

В нем вы должны поместить входной файл, который вы хотите использовать в докере, а не ваш скрипт, который вы добавили, когда создавали докер.

Я предлагаю одну из двух вещей:

  1. Измените свой код так, чтобы он максимально обновлял входной файл в каталоге томов и выполнял его, чтобы вам не приходилось передавать ему какие-либо параметры при каждом запуске.
  2. Измените файл Docker с CMD на ENTRYPOINT.
    Затем, когда вы запустите его, вы можете сделать это:
    docker run -it -v path_in_your_comp:path_inside_your_docker test_build path_inside_your_docker/input_file_name path_inside_your_docker/output_file_name
    Вам нужно, чтобы ваш скрипт на Python мог читать эти параметры при запуске через команду args. имейте в виду, что путь - это имя, которое вы назначили томом внутри докера.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...