Dockerfile 'RUN git clone' 删除中间容器
Dockerfile 'RUN git clone' removes intermediate container
我在 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
(public 存储库的克隆)已删除,容器中不存在 ~/.antigen/antigen。
"Cloning into..." 是红色的,所以我认为命令有问题。但是,如果我 运行 将它放在容器的 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
您看到的红色不是错误造成的。这是因为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 没有问题。
确保您正在克隆,而不是克隆到您的基础映像声明为 VOLUME
的路径中。
因为:
If any build steps change the data within the volume after it has been declared, those changes will be discarded.
根据: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
我在 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
(public 存储库的克隆)已删除,容器中不存在 ~/.antigen/antigen。
"Cloning into..." 是红色的,所以我认为命令有问题。但是,如果我 运行 将它放在容器的 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
您看到的红色不是错误造成的。这是因为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 没有问题。
确保您正在克隆,而不是克隆到您的基础映像声明为 VOLUME
的路径中。
因为:
If any build steps change the data within the volume after it has been declared, those changes will be discarded.
根据: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