运行Docker镜像的时候出现 "exec: \"python\": executable file not found in $PATH": unknown.的问题

具体内容如下:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: "python": executable file not found in $PATH": unknown.
Dockfile内容为:

FROM nvidia/cuda:10.0-cudnn7-runtime-ubuntu16.04

RUN apt-get update && apt-get install -y --no-install-recommends
build-essential
cmake
curl
ca-certificates
libjpeg-dev
libpng-dev &&
rm -rf /var/lib/apt/lists/*

COPY . /workspace
WORKDIR /workspace

CMD ["python", "run.py", "/input_path", "/output_path"]



```

run.py 没有加入到容器里

在15行之前加入 ADD /data/run.py run.py

应该是docker镜像没有安装python环境。

CMD ["python", "run.py", "/input_path", "/output_path"]

是exec风格的语法,不会通过shell执行,可能会导致读不到PATH中的环境变量,可以改成下面两种写法试试

# entrypoint 才是官方推荐的启动入口
ENTRYPOINT ["python", "run.py", "/input_path", "/output_path"]
# 必须用cmd则需要这样写
CMD ["/usr/bin/python", "run.py", "/input_path", "/output_path"]

参考:

【docker】CMD ENTRYPOINT 区别 终极解读 昨天用Dockerfile来启动mongodb的集群,启动参数--replSet死活没执行,最后就决定研究一哈cmd和entrypoint。但是上网看了一些资料个人觉得讲的不好,还是没有说出根本的东西,决定自己研究并且整理一哈。首先上docker官网:https://docs.docker.com/engine/reference/builder/#cmd感觉官网关于这两个命令讲的简直不要 https://blog.csdn.net/u010900754/article/details/78526443


如果上述方案没解决问题,看这里

看错误是FROM的基础镜像里没有包含python环境,可通过以下方法(任选一个)解决:

  1. 换一个可用的镜像
  2. RUN里加上安装python的命令
  3. nvidia/cuda:10.0-cudnn7-runtime-ubuntu16.04镜像启动一个容器,通过docker exec进入容器里安装你需要的基础环境,然后把处理好的容器打包成新镜像,用新镜像运行run.py

没有安装对应好的依赖 安装一下