如何解决Docker容器启动时ERRO[0000] context canceled及python报错?
容器启动报错
exec: "python": 无法找到当前目录下的可执行文件解决方案 错误原因
容器内不存在名为python的可执行程序:你的Dockerfile安装了python3.7,但系统默认没有创建python指向python3.7的软链接;同时虚拟环境的PATH配置虽已设置,但直接调用python时系统无法自动定位到虚拟环境中的可执行文件。
解决方案
方案1:指定虚拟环境中python的绝对路径
直接在ENTRYPOINT中使用虚拟环境内python的完整路径,确保系统能精准找到:
ENTRYPOINT ["/home/next_gen/workflow_env/bin/python", "/home/next_gen/app.py"]
方案2:创建python软链接
在Dockerfile的依赖安装步骤后,添加创建软链接的命令,让系统识别python命令:
修改后的依赖安装RUN块:
# dependencies install RUN apt-get update && apt-get install -y --reinstall libgtk2.0-0 \ libdc1394-22 python3-opencv libatomic1 python3 python3-venv \ software-properties-common && \ add-apt-repository -y ppa:deadsnakes/ppa && \ apt-get update && apt install -y python3.7 \ python3.7-venv python3.7-dev gcc && \ ln -s /usr/bin/python3.7 /usr/bin/python
方案3:直接使用python3.7命令
将ENTRYPOINT中的python替换为系统已安装的python3.7:
ENTRYPOINT ["python3.7", "/home/next_gen/app.py"]
注意:此方式会绕过虚拟环境,仅当依赖包安装在系统级python3.7中时适用,不推荐用于你的现有配置
额外优化(可选)
你的CMD中使用的环境变量(如$INPUT_JSON)在JSON格式ENTRYPOINT/CMD中不会被解析,若需要动态读取环境变量,可改用shell形式的ENTRYPOINT:
ENTRYPOINT ["bash", "-c", "python /home/next_gen/app.py --ifile $INPUT_JSON --environ $ENV --process $PROCESS --disktype $DISK_TYPE --cache $CACHE"]
内容的提问来源于stack exchange,提问作者Manabroy72
相关产品推荐
相关产品推荐

