Dockerfile';运行git克隆&x27;移除中间容器

Dockerfile';运行git克隆&x27;移除中间容器,git,docker,boot2docker,git-clone,Git,Docker,Boot2docker,Git Clone,我在Windows7上使用Boot2Docker,用Dockerfile构建我的开发环境。当我运行docker build-t myimage dir/of/docker/file时,一切正常,直到这一行: RUN git clone --verbose https://github.com/zsh-users/antigen ~/.antigen/antigen 该行的输出为: Step 12 : RUN git clone --verbose https://github.com/zsh-

我在Windows7上使用Boot2Docker,用Dockerfile构建我的开发环境。当我运行
docker build-t myimage dir/of/docker/file
时,一切正常,直到这一行:

RUN git clone --verbose https://github.com/zsh-users/antigen ~/.antigen/antigen
该行的输出为:

Step 12 : RUN git clone --verbose https://github.com/zsh-users/antigen ~/.antigen/antigen
---> Running in 26cba91e912a
Cloning into '/root/.antigen/antigen'...
POST git-upload-pack (302 bytes)
---> e0012659884b
Removing intermediate container 26cba91e912a
Successfully built e0012659884b
(公共存储库的)克隆已删除,容器中不存在~/.抗原/抗原。 “克隆到…”是红色的,所以我认为该命令有问题。但是如果我在容器外壳中运行它(由docker run-it myimage打开),它会克隆它

我是否做错了什么,或者我是否可以在dockerfile中进行一些设置以使用
git clone
?以下是它的全部内容:

FROM debian:testing
MAINTAINER BimbaLaszlo

RUN apt-get update

RUN apt-get install -y curl

RUN apt-get install -y gcc g++ make
RUN apt-get install -y ctags
RUN apt-get install -y git

RUN apt-get install -y python python-pip python3 python3-pip

RUN apt-get install -y ruby ruby-dev
RUN gem install ripper-tags gem-ripper-tags
RUN gem install pry byebug

RUN apt-get install -y zsh
RUN git clone --progress --verbose https://github.com/zsh-users/antigen ~/.antigen/antigen

您看到的红色不是由错误引起的。这是因为
git clone
没有使用
STDOUT
,我们可以通过以下命令验证它:

$ git clone --progress --verbose https://github.com/zsh-users/antigen > /dev/null
Cloning into 'antigen'...
POST git-upload-pack (255 bytes)
remote: Counting objects: 1291, done.
remote: Total 1291 (delta 0), reused 0 (delta 0), pack-reused 1291
Receiving objects: 100% (1291/1291), 1.10 MiB | 900.00 KiB/s, done.
Resolving deltas: 100% (688/688), done.
Checking connectivity... done.

$ git clone --progress --verbose https://github.com/zsh-users/antigen 2&> /dev/null
在第一个命令中,我将所有
STDOUT
重定向到
/dev/null
,我们仍然可以看到输出。但是在第二个命令中,我将所有
STDERR
重定向到
/dev/null
,因此我们什么也看不到

docker build
中,如果任何输出不在
STDOUT
中,它将变为红色。就这样


因此,Dockerfile没有问题。

确保您正在克隆,而不是克隆到基本映像声明为
卷的路径中

因为:

如果任何生成步骤在声明卷后更改了卷内的数据,则这些更改将被丢弃

根据:

如果您无权访问Dockerfile,则可以检查图像:

sudo docker inspect alpine/git | jq ".[0].Config.Volumes"
将您的
WORKDIR
更改为例如
/root
以保留文件:

# base image declares WORKDIR /git also as VOLUME
FROM alpine/git 
WORKDIR /root
RUN git clone --verbose https://github.com/zsh-users/antigen ~/.antigen/antigen
ENTRYPOINT /bin/sh

我刚刚构建并运行了您的Dockerfile,可以验证它是否正常工作。我采取的步骤是:1。使用您的内容创建了
Dockerfile
。2. <代码>docker构建-t test1.
3<代码>docker运行-it test1/bin/bash然后,在容器内:
root@4a087cf0fece:~#ls.antigen/antigen
可以查看您克隆的所有文件。您是在Linux或Windows上运行的吗?我是在OS X中使用boot2docker运行的。Windows也应该如此。我也有同样的问题,git clone的repo从映像中消失,不知道为什么,我在Linux下。如果一切正常,那么为什么“删除中间容器26cba91e912a”?Docker run总是删除用于构建映像的容器。