簡體   English   中英

如何使用 Python 腳本從 Docker 容器中保存輸出 JSON 文件

[英]How to save output JSON file from a Docker container with Python script

我對 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')

先感謝您。

如果您正在寫入沒有特定路徑的文件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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM