Docker: 从头开始​​时无法在 ADD 后执行 运行 命令

Docker: Unable to execute RUN command after ADD when starting from scratch

我正在尝试从 "scratch" 图像开始为 ARM 架构构建自定义 Linux Alpine docker。我不明白为什么我执行ADD后不能执行任何运行命令。这是我的 Dockerfile:

FROM scratch
ADD rootfs.tar /

MAINTAINER Vittorio_Cozzolino

RUN apk add nodejs

这是我在自动构建完成时得到的输出(最后一行包含错误):

Client:  Version:      1.8.1  API version:  1.20  Go version:  
go1.4.2  Git commit:   d12ea79  Built:        Thu Aug 13 02:49:29 UTC
2015  OS/Arch:      linux/amd64

Server:  Version:      1.8.3-rc1  API version:  1.20  Go version:  
go1.4.2  Git commit:   6f21aba  Built:        Mon Sep 28 20:03:03 UTC
2015  OS/Arch:      linux/amd64 Step 0 : FROM scratch
 ---> Step 1 : ADD rootfs.tar /
 ---> dd771ffd56ea702 Step 2 : MAINTAINER Vittorio_Cozzolino
 ---> 825fc4c990c8a33 Step 3 : RUN apk add nodejs [91mexec: "/bin/sh": stat /bin/sh: no such file or directory

实际上 /bin/sh 存在,事实上,如果我 运行 CMD ["/bin/sh"] 我不会收到任何错误。有人可以帮我吗?

CMD ["/bin/sh"]是对运行的默认命令的简单声明,所以它会一直有效。

检查 tar 是否确实解压,因为有一个 similar issue in 9541: limit your Dockerfile to the ADD directive, and use docker exec or a simple ls 可以查看里面有什么(以及 owner/permission)。
如果 Dockerfile 抱怨 /bin/sh 丢失,并且 /bin/sh 在 tar 存档中...可能是存档未正确解压缩。