我有一个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(但下载工作)
你们有什么想法吗?
答案 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