Docker集装箱赢得';不要运行python

Docker集装箱赢得';不要运行python,python,linux,docker,Python,Linux,Docker,我正在尝试在容器中运行python应用程序。我不断得到: “/bin/sh:1:python3:未找到 我尝试了许多不同的迭代,包括使用python作为基本映像,但都有不同的失败。 这次我构建了一个Ubuntu容器,并在命令行中一次运行一个命令,它在bash中工作。但当我运行容器时,它似乎仍然找不到python 以下是我目前拥有的dockerfile: FROM ubuntu CMD mkdir pong WORKDIR /pong CMD apt-get update CMD apt-get

我正在尝试在容器中运行python应用程序。我不断得到:

“/bin/sh:1:python3:未找到

我尝试了许多不同的迭代,包括使用python作为基本映像,但都有不同的失败。 这次我构建了一个Ubuntu容器,并在命令行中一次运行一个命令,它在bash中工作。但当我运行容器时,它似乎仍然找不到python

以下是我目前拥有的dockerfile:

FROM ubuntu
CMD mkdir pong
WORKDIR /pong
CMD apt-get update 
CMD apt-get install python3 -y
CMD apt-get install python3-pip -y

COPY . /pong

CMD pip3 install pipenv
CMD pip3 install pyxel

CMD python3 main.py

我在docker文档上也花了很多时间,所以请原谅我发布了这个简单的问题,但我被难住了。提前谢谢你!

shshell不知道可执行文件的完整路径
python3

这应该更好地发挥作用:

CMD /usr/bin/python3 main.py

另外,请注意,为了使容器不停止,您需要保持
main.py
进程在前台持续运行。如果它退出,容器将停止。

将所有CMD替换为RUN,最后一个应该是ENTRYPOINT

FROM ubuntu
RUN mkdir pong
WORKDIR /pong
RUN apt-get update 
RUN apt-get install python3 -y
RUN apt-get install python3-pip -y

COPY . /pong

RUN pip3 install pipenv
RUN pip3 install pyxel

ENTRYPOINT ["python3", "main.py"]  
CMD的主要用途是为正在执行的容器提供默认值。这些默认值可以包括可执行文件,也可以省略可执行文件,在这种情况下,您还必须指定入口点指令

RUN指令将在当前映像之上的新层中执行任何命令并提交结果。生成的提交映像将用于Dockerfile中的下一步

有关更多详细信息:




我更喜欢CMD,并且倾向于为init进程或init脚本保留入口点。此外,文件中只能有一个CMD,所以最后一个会赢。是的,您可以使用CMD来传递入口点的默认参数。如果您想启动不同的脚本,这可能会很有用,但对于这个示例来说可能没那么有用。非常感谢!我不能看看它是如何如此迅速地完成这些命令的!我真的很感谢你让我直截了当,我不知道我是如何走上这条道路的。我现在遇到了一个完全不同的错误,但我相信你的答案是我问题的答案。