Dockerfile' RUN git clone'删除中间容器

时间:2015-06-05 20:32:42

标签: git docker boot2docker git-clone

我在Windows 7上使用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

(公共存储库的)克隆被丢弃,〜/ .antigen /抗原不存在于容器中。 "克隆到..."是红色的,所以我觉得这个命令有问题。但如果我在容器的shell(由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

2 个答案:

答案 0 :(得分:4)

您看到的红色,不是由错误引起的。这是因为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没什么问题。

答案 1 :(得分:0)

请确保您要克隆的对象没有克隆到基础映像声明为VOLUME的路径中。

因为:

  

如果在声明后任何构建步骤更改了卷中的数据,则这些更改将被丢弃。

根据:https://docs.docker.com/engine/reference/builder/#notes-about-specifying-volumes

如果您无权访问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