加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

linux-Dockerfile ADD tar.gz无法在使用Docker的ubuntu VM上解压

发布时间:2020-12-16 03:26:10 所属栏目:安全 来源:网络整理
导读:我有一个要构建的Docker映像,当我在Windows和Mac Docker上运行build命令时,它可以正常运行并正确构建,但是如果我在具有docker的Ubuntu-Server VM上运行相同的Dockerfile-Build,我会得到一个错误. 我的Dockerfile的关键部分是: [...]# DependenciesRUN apt-g

我有一个要构建的Docker映像,当我在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失败,执行/usr/local/-step

并产生以下错误:

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

而且我想它不能正确提取下载的tar.gz(但下载有效)

你们有什么主意吗?

最佳答案
这是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

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

编辑,最大程度地减少映像中的层数,建议您在Dockerfile中作为单个RUN命令进行下载,解压缩和清理.例如.这是两个不同的Dockerfile:

$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

但是,只需执行一次RUN下载,生成和清理操作,即可从图层历史记录中节省80MB的下载:

$docker images | grep test-tgz
test-tgz-curl               latest                                     2776133659af        30 seconds ago      269MB
test-tgz-add                latest                                     d625455998ff        2 minutes ago       359MB

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读