You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器无法运行Python应用,报错‘python3: not found’求助

解决Docker容器中找不到python3的问题

你遇到的核心问题是Dockerfile里的CMD指令使用错误——Dockerfile中只会执行最后一条CMD指令,前面所有的CMD都会被直接忽略。这就导致你写的安装Python3、更新源这些步骤根本没在镜像构建阶段运行,容器启动时自然找不到python3命令。

正确的Dockerfile写法

我们需要区分RUN和CMD的作用:RUN用于镜像构建阶段执行命令(比如安装软件、配置环境),CMD用于定义容器启动时默认执行的命令。修正后的Dockerfile如下:

FROM ubuntu
WORKDIR /pong

# 合并更新源、安装Python和pip的命令,同时清理缓存减小镜像体积
RUN apt-get update && \
    apt-get install -y python3 python3-pip && \
    rm -rf /var/lib/apt/lists/*

# 将当前目录内容复制到容器的/pong目录下
COPY . /pong

# 安装所需的Python依赖包
RUN pip3 install pipenv pyxel

# 容器启动时执行的命令(数组形式更规范,避免shell解析问题)
CMD ["python3", "main.py"]

关键改动说明

  • 替换CMD为RUN:所有构建时需要完成的操作(更新源、安装软件、安装依赖)都用RUN执行,这些步骤会在构建镜像时一次性完成
  • 合并命令:用&&连接多个apt-get命令,既保证前一步成功才会执行后一步,又能减少镜像的层数;加入rm -rf /var/lib/apt/lists/*清理apt缓存,避免镜像体积过大
  • 提前设置WORKDIR:WORKDIR会自动创建不存在的目录,所以不需要手动mkdir pong,后续的COPY和命令都会默认在这个目录下执行
  • 规范CMD写法:使用数组形式的CMD,避免shell解析可能带来的问题

为什么手动执行能成功?

你手动进入容器逐条执行命令时,是在容器的运行环境中依次完成了所有安装步骤,自然能正常运行Python应用。但Dockerfile里的多个CMD只会保留最后一条,前面的安装步骤完全没被执行,这就是问题所在。

内容的提问来源于stack exchange,提问作者Maurice Marquis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 22:57:28