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
相关产品推荐
相关产品推荐

