[英]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.