【问题标题】:How to save output JSON file from a Docker container with Python script如何使用 Python 脚本从 Docker 容器中保存输出 JSON 文件
【发布时间】:2022-07-07 22:50:20
【问题描述】:

我真的是 docker 新手,我有一个 python 脚本,它接受几个输入的 csv 文件并给出一个 json 作为输出。

我的 DockerFile 是

FROM python:3.9

WORKDIR /usr/workdir

COPY requirements.txt ./

RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt

COPY annotation_tool.py .

ENTRYPOINT ["python", "-u" , "./annotation_tool.py"]

我的容器使用这个命令:

sudo docker run --rm -v /home/huk/Desktop/idea/varskor_annotation/docker_try:'/input/' varskor_annotation /input/out_total_filtered_2.vcf /input/HumanNet_XI_Network_Stats.csv /input/exac_gnomad_freq.csv /input/gnomad.v2.1.1.lof_metrics.by_transcript.txt

我可以提供输入,但在任何地方都找不到我的输出 JSON。有没有办法直接将输出文件写入我工作的文件夹(-v参数)?

基本上我的 Python 代码是:

file1 = pd.read_csv(sys.argv[1]) 
file2 = pd.read_csv(sys.argv[2])
file3 = pd.read_csv(sys.argv[3])
file4 = pd.read_csv(sys.argv[4] , sep = '\t')

##### AFTER THE MODIFICATIONS I CREATE AN OUTPUT FILE IN A PANDAS DATAFRAME FORMAT

output_file.to_json('output.json' , orient = 'records')

提前谢谢你。

【问题讨论】:

    标签: python json pandas docker


    【解决方案1】:

    如果您正在写入没有特定路径的文件output.json,它将写入WORKDIR 目录。该文件位于容器文件系统中,一旦脚本完成,docker run --rm 选项会立即将其删除。你不能在那个目录上挂载东西,因为那也是你的代码所在的地方。

    如果将输出文件的位置作为附加参数

    output_file.to_json(sys.argv[5], orient='records')
    

    然后你可以在容器启动的绑定挂载目录中传递一个类似/input/output.json的文件名。


    如您所见,Docker 的设计目标之一是故意难以读写主机文件。您展示的设置似乎并不特别需要 Docker:您没有任何复杂的操作系统级依赖项,也没有与容器中运行的任何其他程序进行交互。

    您可能会发现在 Python 虚拟环境中运行它更容易,无需涉及 Docker。 Linux 和 MacOS 系统预装了 Python,因此您可能根本不需要进行任何主机级设置。

    python3 -m venv ./venv
    . ./venv/bin/activate
    pip3 install -r requirements.txt
    
    ./annotation_tool.py \
      out_total_filtered_2.vcf \
      HumanNet_XI_Network_Stats.csv \
      exac_gnomad_freq.csv \
      gnomad.v2.1.1.lof_metrics.by_transcript.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      相关资源
      最近更新 更多