dockerize python-скрипт с помощью sys.path

1

Привет, я пытаюсь запустить докер изображений, который я создал из Dockerfile:

FROM python:3

ADD feature.py /

RUN pip install pandas
RUN pip install numpy

CMD ["python", "/feature.py"]

Вот скрипт python:

import os # I am not sure we are going to do import right here???
import pandas as pd
import numpy as np
import sys


def freesurfer_statistics(address):


df_asseg = []

data = pd.read_csv(address+'/'+'/stats/aseg.stats', sep = '#').loc[79:] 
['Unnamed: 0']

patient = pd.DataFrame()
for i in range(79,124):
    patient = patient.append(data[i].split())

data = pd.DataFrame(np.array(patient).reshape(45,10))
data.columns = ['Index','SegId','NVoxels','Volume_mm3',\

'StructName','normMean','normStdDev','normMin','normMax','normRange']

df_asseg.append(list(data.NVoxels)+list(data.Volume_mm3)+ list(data.normMean)+list(data.normStdDev)+list(data.normMin)+list(data.normMax)+list(data.normRange))


df_asseg = pd.DataFrame(np.array(df_asseg).reshape(1,315))

df_rh = pd.DataFrame(np.array(df_rh).reshape(1,306))

df_rh.columns = names
csv_file=pd.concat([df_asseg, df_rh, df_lh], axis = 1)


csv_file.to_csv(address+'/morphometry.csv')

freesurfer_statistics(sys.argv[1])

Он находит файл и записывает данные в файл morphometry.csv

После сборки докера я запускаю контейнер:

docker run --rm -v /mnt/data/service/fmriprep/run_forrest/freesurfer/sub-01:/data features:latest

У меня есть ошибка:

Traceback (most recent call last):
File "/feature.py", line 95, in <module>
freesurfer_statistics(sys.argv[1])
IndexError: list index out of range

Я думаю, что я ошибаюсь в Dockerfile, im newby в нем. Но не может получить информацию.

Теги:
docker
sys

1 ответ

2

Для вашей freesurfer_statistics(sys.argv[1]) нужен аргумент командной строки, который вы не предоставляете при вызове скрипта python с использованием CMD в вашем файле Docker. Итак, ваша линия CMD в Dockerfile должна быть изменена следующим образом.

CMD ["python", "/feature.py", "argument-for-freeuser_statitics"]

Чтобы выяснить, sys.arg[0] - это имя самого скрипта, а sys.arg[1] - это первый аргумент, который вы sys.arg[1] при вызове сценария в командной строке.

Редактировать на основе комментария. Что вы сделали с docker run было просто сопоставить каталог с контейнерами докеров. Поскольку вы сопоставили свой каталог хоста с /data которые должны быть "аргументом для-free-user_statistics".

CMD ["python", "/feature.py", "/data"]
  • 0
    Спасибо @techtabu за ответ, как мне реализовать "аргумент-для-freeuser_statitics"? - это путь к папке / mnt / data / service / fmriprep / run_forrest / freesurfer / sub-01:, которую я использую в докере команды docker, запустите --rm -v / mnt / data / service / fmriprep / run_forrest / freesurfer / sub-01: / особенности данных: последние
  • 0
    @ Techabu Спасибо, это прекрасно работает! Хорошая практика для понимания работы докера!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню