我试图将一个现有的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文件、CSV和我在上面py文件中导入的模型。我现在正在尝试构建另一个dockerfile,它将以CSV名称作为输入,然后运行python代码。在
这是dockerfile:
^{pr2}$我是这样建造的:
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.
我应该只在运行时插入参数吗?我正确地处理这个问题吗?我对多克很陌生,完全被难住了。在
CMD解决方案
我建议从Entrypoint切换到CMD
这种方法可以在这里深入了解:https://runnable.com/docker/python/dockerize-your-python-application
一些更复杂的(标志等)也可以用CMD处理,如下所示:how to pass command line arguments to a python script running in docker
入口点解决方案
^{pr2}$下面将对这种解决方案进行深入解释:
https://lostechies.com/gabrielschenker/2016/08/21/container-entrypoint/
两者之间的区别(如果你好奇又不知道)
CMD可以从命令行覆盖命令。CMD实际上是容器命令的默认值。在
入口点命令不会从命令行覆盖。在
CMD是ENTRYPOINT相似的,但我更喜欢命令,因为它允许我在运行时更改标志或命令,同时保留相同的dockerfile,如果需要,可以不使用命令运行。在
这里有一个关于区别的较长形式的讨论:http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/
相关问题 更多 >
编程相关推荐