将python脚本放入docker容器

时间:2018-11-30 16:15:14

标签: python docker dockerfile

我正在尝试将现有的python函数放入docker容器中。 python代码将CSV文件(与dockerfile放在同一目录中)作为输入数据并进行一些计算。 py文件如下所示,名为“ PracticeDeploy.py”:

import pandas as pd
import pickle
from OptimizationFunction import main_barrel

# Read in model
gbrModel = pickle.load(open('/src/ValDiffGBR.pkl', 'rb'))
file_name = str(input())
data=pd.read_csv('/src/'+file_name)
new_data = data.dropna(how='any')
preds = main_barrel(gbrModel, new_data)

在我的docker目录中,我已经有一个子文件夹,其中包含我的第一个dockerfile,其中安装了所有库。同样在我的目录中,我在上面的py文件中有py文件,CSV和导入的模型。我现在正在尝试构建另一个将CSV名称作为输入的dockerfile,然后运行python代码。

这是dockerfile:

FROM [my repository] as builder
ARG DATA_FILE

RUN mkdir src
WORKDIR /src
COPY . /src

ENTRYPOINT ["PracticeDeploy.py"]

我这样建造:

sudo docker build --rm -f Dockerfile -t "first_docker" --build-arg DATA_FILE='/src/[csv_name].csv' .

我尝试这样运行:

sudo docker run --rm first_docker

但是我收到此错误:

docker: Error response from daemon: OCI runtime create 
failed: container_linux.go:348: starting container process 
caused "exec: \"PracticeDeploy.py\": executable file not 
found in $PATH": unknown.

我应该只在运行时插入参数吗?我能正确处理吗?我是Docker的新手,完全陷入困境。

1 个答案:

答案 0 :(得分:2)

CMD解决方案

我建议从Entrypoint切换到CMD

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

此方法可在此处深入了解:https://runnable.com/docker/python/dockerize-your-python-application

CMD也可以处理更多复杂性(标志等),如此处所示:how to pass command line arguments to a python script running in docker

ENTRYPOINT解决方案

ENTRYPOINT ["python", "app.py"]

这种解决方案的风格在这里进行了深入的解释:

https://lostechies.com/gabrielschenker/2016/08/21/container-entrypoint/

两者之间的区别(如果您好奇并且不知道)

可以从命令行覆盖

CMD 命令。 CMD 实际上是容器命令的默认值。

ENTRYPOINT 命令不会从命令行覆盖。

CMD ENTRYPOINT 类似,但我更喜欢使用命令,因为如果需要,它可以让我在运行时更改标志或命令,同时保留与之相同的dockerfile。如果需要,可以在不使用命令的情况下运行。

以下是有关区别的更长篇讨论:http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/