Dockerfile ADD tar.gz不会在带有Docker

时间:2017-08-31 17:21:55

标签: linux ubuntu docker dockerfile tar

我有一个Docker Image我想构建,当我在Windows和Mac Docker上运行build命令时,它运行正常并且构建正确,但是如果我在带有docker的Ubuntu-Server VM上运行相同的Dockerfile-Build我收到了错误。

我的Dockerfile的关键部分是:

[...]
# Dependencies
RUN apt-get update && apt-get install -y apt-utils curl git tar gzip
# Install Go
ENV GO_VERSION 1.8
WORKDIR /tmp
ADD https://storage.googleapis.com/golang/go$GO_VERSION.linux-amd64.tar.gz ./
RUN mv go /usr/local/
[...]

但是在Ubuntu服务器上,VM在RUN mv go /usr/local/ - 步骤

失败了

产生以下错误:

Step 10/24 : RUN mv go /usr/local/
 ---> Running in 6b79a20769eb
mv: cannot stat ‘go’: No such file or directory

我认为它没有正确提取下载的tar.gz(但下载工作)

你们有什么想法吗?

1 个答案:

答案 0 :(得分:3)

这是17.06的已知问题,并在17.06.1中进行了修补。记录的行为是下载tgz但从远程URL拉取时不解压缩。自动解压缩tgz是17.06中的一个意外的行为变化,它们又恢复为仅在17.06.1中下载tgz。

17.06的发行说明(参见顶部的说明):https://github.com/docker/docker-ce/releases/tag/v17.06.0-ce

17.06.01的发行说明:https://github.com/docker/docker-ce/releases/tag/v17.06.1-ce

问题:https://github.com/moby/moby/issues/33849

修复公关:https://github.com/docker/docker-ce/pull/89

编辑,最小化图像中的图层数量,我建议在Dockerfile中作为单个<!DOCTYPE html> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script> function getEmail() { var email=$('#email').val(); google.script.run .withSuccessHandler(sayThanks) .getEmail(email); } function sayThanks() { $('#saythanks').css('display','block'); $('#controls').css('display','none'); } console.log('My Code'); </script> </head> <body> <div id="saythanks" style="display:none">Hey Thanks for Responding</div> <div id="controls"> <input type="text" id="email" size="35" placeholder="Enter your email"/> <input type="button" id="submitButton" value="Submit" onClick="getEmail();"/> </div> </body> </html> 命令进行下载,解压缩和清理。例如。这里有两个不同的Dockerfiles:

RUN

此处将截断构建输出...

$ cat df.tgz-add
FROM busybox:latest
ENV GO_VERSION 1.8
WORKDIR /tmp

ADD https://storage.googleapis.com/golang/go$GO_VERSION.linux-amd64.tar.gz ./
RUN tar -xzf go$GO_VERSION.linux-amd64.tar.gz \
 && rm go$GO_VERSION.linux-amd64.tar.gz

CMD ls -l .

$ cat df.tgz-curl
FROM busybox:latest
ENV GO_VERSION 1.8
WORKDIR /tmp

RUN wget -O go$GO_VERSION.linux-amd64.tar.gz https://storage.googleapis.com/golang/go$GO_VERSION.linux-amd64.tar.gz \
 && tar -xzf go$GO_VERSION.linux-amd64.tar.gz \
 && rm go$GO_VERSION.linux-amd64.tar.gz

CMD ls -l .

他们运行相同:

$ docker build -t test-tgz-add -f df.tgz-add .
...

$ docker build -t test-tgz-curl -f df.tgz-curl .
...

但是,执行单个$ docker run -it --rm test-tgz-add total 4 drwxr-xr-x 11 root root 4096 Aug 31 20:27 go $ docker run -it --rm test-tgz-curl total 4 drwxr-xr-x 11 root root 4096 Aug 31 20:29 go 下载,构建和清理可以为您的图层历史记录节省80MB的下载量:

RUN