使用适用于Windows的Docker从Python脚本创建Docker映像时,无法获取带有数据的输出文件

时间:2019-01-09 09:30:12

标签: python linux windows docker

我正在将Docker用于带有Linux容器的Windows,我创建了一个简单的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')

现在我正试图用它创建一个docker容器,我想只传递文件夹位置,因为数据每天都在变化。另外我还需要在运行docker镜像后输出文件。

我写了以下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映像。它正在成功构建,没有任何错误。

我正在使用docker run --volume ./test_script.py:/test_script.py test_build > ./output.txt运行映像,然后它正在创建输出文件,但是该文件将为空。

如何获取数据和文件

1 个答案:

答案 0 :(得分:0)

@archit,您需要将卷附加到Docker。
卷是您可以持久保存输出文件的唯一方法,也是您每次使用docker时docker将使输入文件运行的唯一方式。

docker run \
  -v host_volume:/app \
  test_build

您应该在其中放置要让Docker使用的输入文件,而不是您在构建Docker时添加的脚本的脚本。

我建议两件事之一

  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命令读取此参数。 请记住,路径是您在docker内部映射卷的名称。