运行Docker镜像时出现“bin/bash: python: command not found”错误

5

以下是docker run的输出结果:

hausey@ubuntu:~/niso2-jxj934$ docker run niso2-jxj934
Test version: 15:59, Mar 24th 2020
Question 1: Evaluation of expression.
Command failed: /bin/bash -c "python /bin/jxj934.py  -question 1  -expr \"(ifleq (ifleq -1.11298616747 1.63619642199 (sub -1.11298616747 -1.11298616747) 1.7699684348) (add (exp -0.822479932786) 1.39992604386) (add -1.11298616747 (exp 0.385042309638)) 0.205973267133)\" -n 10 -x \"-0.168958230447 -0.131749160548 0.0971246476126 1.8706205565 -0.464122426299 2.35887369763 -0.375948313434 -0.613901105864 0.411326743135 -0.149276696072\"" Exit status: exited with code 127 stderr: /bin/bash: python: command not found

以下是Dockerfile文件:

FROM pklehre/niso2020-lab2-msc
ADD jxj934.py /bin
CMD ["-username","jxj934", "-submission", "python /bin/jxj934.py"]

这里是针对Python的检查:

hausey@ubuntu:~/niso2-jxj934$ which python
/usr/bin/python

这与Python的PATH相关吗?


2
你没有在你的Docker镜像中安装Python。你在你的机器上检查了which python,而不是在你的Docker容器内部检查。 - Gabio
1个回答

8

通常,这与PATH的值有关,但具体来说,该镜像只有python3。换句话说,通过以下方式查看文件系统:

find / -name -type f "python*"

在 / 目录下查找名为“python*”的普通文件。 只有 python3 的结果。
...
/usr/bin/python3.8
/usr/bin/python3.7
...

一个快速的解决方案是在CMD行中指定python3 (python3 /bin/jxj934.py)。另一个方法是添加一个软链接 (ln -s /usr/bin/python /usr/bin/python3.8)。最好的解决方案是使用包管理器来解决问题。但这也取决于您是否控制Dockerfile +镜像。
当您查询which python时,您是在本地计算机上进行的。容器运行在与您不同的文件系统命名空间中,并具有完全不同的终端。容器的行为与您的计算机不同,任何这样的调查只有在容器内运行时才会产生相关结果。
虽然与您的问题有些无关,但这可能对您有所帮助。
docker run有一个--entrypoint选项,允许您覆盖镜像的入口点。您可以要求使用bash并探索容器。
docker run --it --entrypoint=bash pklehre/niso2020-lab2-msc

请注意,bash 必须在 $PATH 中。

谢谢。这就可以了。我已经尝试了第一个解决方案,我会探索你提到的其他方法。非常感谢! - J.H J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接