为何使用python:3-onbuild镜像构建Docker时需提供requirements.txt?
为什么使用python:3-onbuild镜像会要求提供requirements.txt?
这是因为你用的python:3-onbuild是Docker官方提供的预配置"onbuild"类型镜像,它的设计初衷是帮你简化Python项目的构建流程,但代价是它自带了一套固定的构建规则——其中就包含了自动处理requirements.txt的步骤。
具体原因拆解:
onbuild镜像内部预先定义了几个ONBUILD触发指令,当你基于它构建自己的镜像时,Docker会自动执行这些指令。拿Python的onbuild镜像来说,它的底层逻辑大概是这样的:
FROM python:3 # 当基于此镜像构建时,自动执行以下步骤 ONBUILD COPY requirements.txt /usr/src/app/ ONBUILD RUN pip install --no-cache-dir -r requirements.txt ONBUILD COPY . /usr/src/app/
所以当你运行sudo docker build -t helloeveryone .时,Docker会先触发第一个ONBUILD指令:尝试从你的构建上下文(当前目录)复制requirements.txt到容器里。但你没准备这个文件,自然就会抛出"no such file or directory"的错误。
两种解决办法:
办法一:创建空的requirements.txt
如果你没有任何Python依赖需要安装,直接在项目根目录创建一个空文件就行:touch requirements.txt这样Docker就能顺利完成复制步骤,后续的
pip install也会因为文件为空而跳过安装。办法二:改用基础Python镜像,自定义构建流程
如果你不想被onbuild镜像的预设规则限制,可以直接用基础的python:3镜像,手动编写构建步骤,这样就完全不用管requirements.txt了。修改后的Dockerfile如下:# base image FROM python:3 WORKDIR /app ADD . /app # run the application CMD ["python", "helloeveryone.py"]
内容的提问来源于stack exchange,提问作者teoman
相关产品推荐
相关产品推荐

