Linux tar命令后的Docker运行时错误

Linux tar命令后的Docker运行时错误,linux,docker,amazon-ec2,gzip,tar,Linux,Docker,Amazon Ec2,Gzip,Tar,我正在使用wget检索一个tar.gz文件,并使用tar-xzf将其解包。如果我从正在运行的容器中运行tar命令,它将成功解包并存储为init,然后我可以在其中使用/init启动服务 我遇到的问题是,当我在Dockerfile中的RUN指令中使用相同的tar命令时,我总是在docker build时得到相同的错误。在RUN tar-xzf命令之后执行任何下一条指令 以下是我得到的错误: OCI runtime create failed: container_linux.go:348: star

我正在使用
wget
检索一个
tar.gz
文件,并使用
tar-xzf
将其解包。如果我从正在运行的容器中运行
tar
命令,它将成功解包并存储为
init
,然后我可以在其中使用
/init
启动服务

我遇到的问题是,当我在
Dockerfile
中的
RUN
指令中使用相同的
tar
命令时,我总是在
docker build时得到相同的错误。
RUN tar-xzf
命令之后执行任何下一条指令

以下是我得到的错误:

OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory": unknown
这是我的测试文档:

FROM amazonlinux:2
RUN yum install -y wget tar gzip
wget https://github.com/just-containers/s6-overlay/releases/download/v1.19.1.1/s6-overlay-amd64.tar.gz
RUN tar -xzf s6-overlay-amd64.tar.gz
RUN echo "test"
注意:如果我将
RUN tar-xzf
作为
Dockerfile
中的最后一条指令,它将成功生成,但尝试在容器中运行映像将导致相同的错误


进一步的故障排除信息:

在容器中,我运行了
哪个gzip
,以确认gzip是从正确的路径使用的(
/usr/bin/gzip
),我还运行了
文件https://github.com/just-containers/s6-overlay/releases/download/v1.19.1.1/s6-overlay-amd64.tar.gz
,在接近尾声时产生以下输出:

长度:1713081(1.6M)[应用程序/八位字节流]

据我所知,
octet-stream
仅仅意味着该文件是一个二进制文件,扩展名应该足以告诉我这是一个
gzip
文件

就其价值而言,我知道这个
tar.gz
文件正在另一个由alpine:3.6构建的工作Dockerfile中成功解包:


我尝试了引用的
Dockerfile
中使用的
tar
命令,结果总是出现相同的错误。

问题最终不是
Docker
问题,而是我试图解压缩的
tar.gz
文件的问题。找到多个解决方法。

引用的docker文件将curl的输出直接导入tar,而不创建临时文件。您尝试过这种方法吗?@MisterSmith是的,它可以工作,但是任何
RUN
命令在生成时都会出现以下错误:
OCI运行时创建失败:container\u linux.go:348:启动容器进程导致“exec:\”/bin/sh\”:stat/bin/sh:没有这样的文件或目录:未知
。我将把这个添加到问题中,以澄清我已经尝试了原始方法。tar是一个实际的二进制文件还是一个指向其他东西的包装器脚本?错误似乎意味着脚本是错误的starting@MisterSmith我同意这就是错误所暗示的。我怎样才能知道它是一个二进制文件还是一个指向其他东西的包装器脚本?wget返回
[application/octet stream]
这一事实意味着它是一个二进制文件,不是吗?在典型的Linux开发人员机器上,
file
命令通常会告诉您(或猜测)某个文件是什么类型的。您可能没有将此工具放在容器中,因为它更像是一个开发人员工具。
curl
为您解压缩文件并非不可能。