【问题标题】:How to run a python script based on pip installation in docker? [duplicate]如何在docker中运行基于pip安装的python脚本? [复制]
【发布时间】:2020-02-07 16:30:19
【问题描述】:

我的docker文件设计如下:

#Use python 3.6 image
FROM python:3.6
ENV PYTHONUNBUFFERED 1

#install required packages
RUN apt-get update
RUN apt-get install libsasl2-dev libldap2-dev libssl-dev python3-dev psmisc -y

#install a pip package
#Note: This pip package has a completely configured django project in it
RUN pip install <pip-packge>

#add a configuration file required for setup
ADD appAdd.json /

#Run a script
#Note: Here appmanage.py is a file inside the pip installed location, but it will be accesible directly without cd to the folder
RUN appmanage.py appAdd.json

#The <pip-packge> installed comes with a built in django package, so running it with following CMD
#Note: Here manage.py is present inside the pip package folder but it is accesible directly
CMD ["manage.py","runserver","0.0.0.0:8000"]

当我跑步时:

sudo docker build -t test-app .

python 脚本运行部分在功能方面将成功,但图像未创建,因为此时它退出并出现以下错误:

The command '/bin/sh -c appmanage.py appAdd.json' returned a non-zero code: 137

它是否将其视为 shell 脚本而不是 python 脚本。我怎样才能克服这个问题并成功运行 django 项目?

注意:在本地环境中,我可以在我的机器上执行这些步骤并成功设置。所以pip包附带的django项目的代码没有问题

更新

脚本 appmanage.py 在 9999 端口运行 django 项目并执行一些测试并杀死 9999 端口。脚本中的 kill 操作是否导致上述错误(137)?

【问题讨论】:

    标签: python django docker dockerfile


    【解决方案1】:

    您需要使用appmanage.py 的完整路径。要找到它,您可以使用站点包目录。

    替换

    RUN appmanage.py appAdd.json
    

    RUN PYTHON_SITE_PACKAGES="$(python -c 'import site; print(site.getsitepackages()[0])')" \
        && python $PYTHON_SITE_PACKAGES/<package>/appmanage.py
    

    【讨论】:

    • 是的,我试过了,这是错误:python3: can't open file 'appmanage.py': [Errno 2] No such file or directory 因为文件位于 pip 包路径(站点包)内
    • 在这种情况下,请尝试使用 appmanage.py 的完整路径。
    • 如何获取 pip 路径(安装包的位置)?有没有环境变量?
    • 查看我的更新答案。你要安装的 pip 包是什么?
    • 稍微修改了命令以保持变量的值(编辑你的答案),但问题没有解决,脚本正在执行但脚本完成后,构建退出与问题中提到的相同的错误(137)。
    【解决方案2】:

    我们可以使用 run 将 sh shell 更改为 python shell。

    只需修改RUN部分如下:

    RUN ["/bin/python", "appmanage.py", "appAdd.json"]
    

    【讨论】:

    • 那没有帮助,请阅读 jakub 的答案和 cmets
    • 是的,我更新了我的答案。这也可能是您的答案,但我的方法是另一种方式。如果您没有/bin/python,请尝试“/bin/python3”。我还去掉了-c 选项,因为它不是必需的。
    猜你喜欢
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多