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

Docker多阶段构建Python3镜像报错:文件未找到问题咨询

解决Docker多阶段构建Python镜像的报错问题

首先,咱们先搞清楚你为啥会遇到这个错误:

报错原因分析

你在base阶段用apt-get install python3安装的Python,在Ubuntu 18.04里的实际路径是/usr/bin/python3,而不是你复制的/usr/local/bin/目录。这就导致release阶段的镜像里根本没有Python解释器,当你运行./test.py时,系统找不到执行脚本所需的Python,自然就抛出了no such file or directory的错误。

至于你说在release阶段重新安装Python就能运行,那是因为这次安装补上了缺失的解释器,但这确实违背了多阶段构建的初衷。

多阶段构建到底有啥用?

它的核心价值是分离「构建环境」和「运行环境」,从而大幅减小最终镜像的体积,同时避免把构建过程中的冗余依赖带到生产环境里:

  • 比如如果你的Python项目需要编译C扩展(像一些科学计算库),就得安装gcc、make这类构建工具,这些工具在运行时完全没用;
  • 再比如用pip安装依赖时,构建阶段可能会留下缓存文件,多阶段构建可以只复制安装好的依赖包,丢掉缓存。
    你现在的场景比较简单,只是安装Python,所以看起来好像重复,但复杂场景下它的优势就很明显了。

给你几个正确的Dockerfile写法

写法一:纠正Python路径的复制

FROM ubuntu:18.04 as base
RUN apt-get -qy update && apt-get install python3 -y
WORKDIR /pydocktest
COPY test.py .

FROM ubuntu:18.04 AS release
WORKDIR /pytest
# 复制正确的Python可执行文件路径
COPY --from=base /usr/bin/python3 /usr/bin/python3
# 复制项目代码
COPY --from=base /pydocktest .
# 直接用Python解释器运行脚本,比依赖shebang更稳妥
CMD ["python3", "./test.py"]

写法二:用轻量Python镜像优化体积

如果你的项目不需要Ubuntu的完整环境,推荐用官方的轻量Python镜像,能进一步缩小镜像:

# 构建阶段:安装依赖(如果有requirements.txt的话)
FROM python:3.8-slim as base
WORKDIR /pydocktest
COPY requirements.txt .
# --no-cache-dir避免留下pip缓存,减小镜像体积
RUN pip install --no-cache-dir -r requirements.txt
COPY test.py .

# 运行阶段:只复制必要的依赖和代码
FROM python:3.8-slim AS release
WORKDIR /pytest
# 复制安装好的Python依赖包
COPY --from=base /usr/local/lib/python3.8/site-packages /usr/local/lib/python3.8/site-packages
# 复制项目代码
COPY --from=base /pydocktest .
CMD ["python3", "./test.py"]

额外小提示

如果坚持用./test.py直接运行,需要满足两个条件:

  1. 在test.py的开头加上shebang:#!/usr/bin/env python3
  2. 在base阶段给脚本添加执行权限:RUN chmod +x test.py

不过还是推荐直接用python3 ./test.py的方式运行,兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:12:34