Docker:来自守护进程的错误响应:rpc错误:代码= 2 desc =“oci运行时错误:exec格式错误”

时间:2016-04-15 17:33:39

标签: docker dockerfile boot2docker

我写了以下docker文件

FROM cloudera/quickstart

MAINTAINER abhishek "http://www.foobar.com"

ADD ./SparkIntegrationTestsAssembly.jar /
ADD ./entrypoint.sh /
ADD ./twitter.avro /

EXPOSE 8020 50070 50010 50020 50075 8030 8031 8032 8033 8088 8040 8042 10020 19888 11000 8888 18080 7077

RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

我使用命令

构建了我的图像
docker build --tag foobar:auto .

此命令的输出是

Sending build context to Docker daemon  93.1 MB
Step 1 : FROM cloudera/quickstart
 ---> 4239cd2958c6
Step 2 : MAINTAINER abhishek "http://www.foobar.com"
 ---> Running in 3ad11fe4aa77
 ---> 22a2f2840475
Removing intermediate container 3ad11fe4aa77
Step 3 : ADD ./SparkIntegrationTestsAssembly.jar /
 ---> 1ebae604e632
Removing intermediate container 0f047ec885a8
Step 4 : ADD ./entrypoint.sh /
 ---> 880cf4ff22aa
Removing intermediate container 0808ba44c97a
Step 5 : ADD ./twitter.avro /
 ---> 6978f2adf422
Removing intermediate container 43d812aaa3ae
Step 6 : EXPOSE 8020 50070 50010 50020 50075 8030 8031 8032 8033 8088 8040 8042 10020 19888 11000 8888 18080 7077
 ---> Running in af90e145f295
 ---> 6fcfb5ad934c
Removing intermediate container af90e145f295
Step 7 : RUN chmod +x /entrypoint.sh
 ---> Running in 4696faa2d330
 ---> 843ee5165937
Removing intermediate container 4696faa2d330
Step 8 : ENTRYPOINT /entrypoint.sh
 ---> Running in 4caf6e225007
 ---> 81cca7ee3198
Removing intermediate container 4caf6e225007
Successfully built 81cca7ee3198

但是当我尝试使用

运行我的容器时
docker run --hostname=quickstart.cloudera --rm --privileged=true -t -i  -p "8020:8020" -p "50070:50070" -p "50010:50010" -p "50020:50020" -p "50075:50075" -p "8030:8030" -p "8031:8031" -p "8032:8032" -p "8033:8033" -p "8088:8088" -p "8040:8040" -p "8042:8042" -p "10020:10020" -p "19888:19888" -p "11000:11000" -p "8888:8888" -p "18080:18080" -p "7077:7077" foobar:auto

我收到错误

docker: Error response from daemon: rpc error: code = 2 desc = "oci runtime error: exec format error".

我的entrypoint.sh文件看起来像

/usr/bin/docker-quickstart
service hadoop-hdfs-namenode restart
hdfs dfs -mkdir -p input
hdfs dfs -put /twitter.avro /input/twitter.avro
spark-submit --class com.abhi.HelloWorld --master local[1] SparkIntegrationTestsAssembly.jar /input/twitter.avro /output

3 个答案:

答案 0 :(得分:28)

您是否发布了完整的entrypoint.sh? 内核尝试通过查看可执行文件的第一个字节来识别文件类型。对于脚本,您需要添加所谓的shebang行。您可能需要在entrypoint.sh的最顶部添加一个shebang行,例如:

#!/bin/sh
/usr/bin/docker-quickstart
service hadoop-hdfs-namenode restart
hdfs dfs -mkdir -p input
hdfs dfs -put /twitter.avro /input/twitter.avro
spark-submit --class com.abhi.HelloWorld --master local[1] SparkIntegrationTestsAssembly.jar /input/twitter.avro /output

答案 1 :(得分:2)

  

来自守护程序的错误响应:rpc错误:code = 2 desc =“oci runtime error:exec format error”

在我的情况下,我尝试在32位ArchLinux(树莓派2)上安装docker时出现此错误。相反,我使用HyperioOS,它变得更顺畅,安装速度更快。但最终,大多数docker镜像与32位架构和they outline this不兼容,这是导致此错误的可能原因。

  

这里我们在Raspberry Pi上运行Docker。所以这里的CPU架构是ARM而不是Intel或AMD的x86 / x64。因此,您使用的基于Docker的应用程序必须专门为ARM体系结构打包!为x86 / x64打包的基于Docker的应用程序将无法运行,并将导致错误

答案 2 :(得分:0)

根据Cloudera's documentation,您应该以{{1​​}}和--hostname

开头

来自文档

--priviliged

下表中包含所需标志和其他选项的说明:

docker run --hostname=quickstart.cloudera --privileged=true -t -i [OPTIONS] [IMAGE] /usr/bin/docker-quickstart