Docker 构建映像抱怨:致命:不是 git 存储库(或任何父目录):.git

Docker build image complain about: fatal: not a git repository (or any of the parent directories): .git

我正在使用这个 Dockerfile 内容:

FROM ubuntu:18.04
RUN apt-get update 
RUN apt-get install git -y
RUN git clone https://code.qt.io/qt/qt5.git /cloned-qt    
RUN cd /cloned-qt/   
RUN git checkout 5.11
RUN git pull

一旦我 运行 我的构建映像命令:

sudo docker build -t qt5.11-auto:v1 .

我收到此错误消息:

Sending build context to Docker daemon  4.608kB
Step 1/10 : FROM ubuntu:18.04
 ---> ea4c82dcd15a
Step 2/10 : RUN apt-get update
 ---> Using cache
 ---> 60e7c61ea78c
Step 3/10 : RUN apt-get install git -y
 ---> Using cache
 ---> 50a4def0607e
Step 4/10 : RUN git clone https://code.qt.io/qt/qt5.git /cloned-qt
 ---> Using cache
 ---> 97fb8ab6dc15
Step 5/10 : RUN cd /cloned-qt/
 ---> Running in 9be03fba40fa
Removing intermediate container 9be03fba40fa
 ---> 130bc457eb66
Step 6/10 : RUN git checkout 5.11
 ---> Running in 35de823fdf9c
fatal: not a git repository (or any of the parent directories): .git

在这个失败的步骤之后,当我 运行 容器并执行相同的命令时,我成功地 运行 它们。 docker 构建失败 运行 "git checkout" 命令的原因似乎是什么,但是当 运行 在容器中将其运行时?

每次您执行 RUN,docker 都会创建一个新的临时容器到 运行,因此像 cd 这样的命令无效。

WORKDIR /cloned-qt/

而不是

RUN cd /cloned-qt/

将 "RUN cd /cloned-qt/" 命令更改为 "WORKDIR cloned-qt" 它将按预期工作

将第 5 步和第 6 步合并为单层,如下所示。

运行 cd /cloned-qt/ && git checkout 5.11