Docker以GitHub为构建上下文时COPY . 触发文件找不到错误
问题根因
旧版本Docker存在行为差异:COPY单个文件到不存在的目标目录时,会自动创建目标目录;但COPY整个目录(你这里源是.即构建上下文根目录)到不存在的目标目录时,不会自动创建,直接触发路径不存在报错。
你之前COPY单个requirements.txt时触发了自动创建目录的逻辑,所以构建正常,替换成COPY整个上下文后就触发了报错。
另外也可以排查两个潜在问题:
- 你的GitHub仓库根目录下的
.dockerignore文件是否排除了除requirements.txt外的所有必要文件,如果需要保留特定目录/文件,要添加!目录名/、!文件名的例外规则 - 你填写的GitHub上下文URL是否为仓库根地址,不要携带/tree/main/xxx这类子目录后缀
解决方案
方案1:提前创建目标目录
在COPY指令前新增创建目录的指令即可:
FROM python:3.8.12-slim-buster RUN apt-get update RUN yes | apt-get install python3-dev build-essential RUN pip install --upgrade pip # 提前创建目标目录 RUN mkdir -p /rasa_traind/ COPY . /rasa_traind/ RUN pip install -r /rasa_traind/requirements.txt WORKDIR /rasa_traind/rasa_actions_server/ CMD ["rasa", "run"]
方案2:提前指定WORKDIR(更推荐)
WORKDIR指令会自动创建不存在的目录,调整指令顺序即可:
FROM python:3.8.12-slim-buster RUN apt-get update RUN yes | apt-get install python3-dev build-essential RUN pip install --upgrade pip # 提前指定工作目录,不存在会自动创建 WORKDIR /rasa_traind/ # 直接把上下文内容复制到当前工作目录 COPY . ./ RUN pip install -r requirements.txt WORKDIR /rasa_traind/rasa_actions_server/ CMD ["rasa", "run"]
内容的提问来源于stack exchange,提问作者user994165
相关产品推荐
相关产品推荐

