webentwicklung-frage-antwort-db.com.de

Docker: Fehlerantwort vom Daemon: RPC-Fehler: Code = 2 desc = "oci-Laufzeitfehler: Exec-Formatfehler"

Ich habe die folgende Docker-Datei geschrieben

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"]

ich habe mein Image mit dem Befehl erstellt 

docker build --tag foobar:auto .

Die Ausgabe dieses Befehls war 

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

Aber wenn ich versuche, meinen Container mit auszuführen

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

Ich bekomme einen Fehler

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

Meine entrypoint.sh Datei sieht so aus

/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
16
Knows Not Much

Haben Sie Ihren vollständigen entrypoint.sh? Veröffentlicht. Der Kernel versucht, den Dateityp zu erkennen, indem er die ersten Bytes der ausführbaren Datei betrachtet. Für Skripte müssen Sie eine sogenannte Shebang Zeile hinzufügen. Möglicherweise müssen Sie eine Shebang-Zeile ganz oben in Ihrem entrypoint.sh hinzufügen, z.

#!/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
28
gesellix

Fehlerantwort vom Daemon: RPC-Fehler: Code = 2 desc = "oci-Laufzeitfehler: Exec-Formatfehler"

In meinem Fall habe ich diese Fehlermeldung erhalten, als ich versuchte, das Docker auf einem 32-Bit-ArchLinux (einem Raspberry Pi 2) zu installieren. Stattdessen benutzte ich HyperioOS und es wurde viel glatter und war viel schneller zu installieren. Am Ende sind die meisten Docker-Images jedoch nicht mit 32-Bit-Architekturen kompatibel und sie beschreiben dies als möglichen Grund für diesen Fehler. 

Hier betreiben wir Docker auf einem Raspberry Pi. Daher ist die CPU-Architektur hier ARM und nicht x86/x64 von Intel oder AMD. Daher müssen Docker-basierte Apps speziell für die ARM - Architektur gepackt werden! Docker-basierte Apps für x86/x64 sind nicht funktionsfähig und führen zu einem Fehler

2
Erich

Laut Clouderas Dokumentation sollten Sie es mit --hostname und --priviliged beginnen

Aus den Unterlagen

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

Erläuterungen zu den erforderlichen Flags und anderen Optionen finden Sie in der folgenden Tabelle:

--hostname=quickstart.cloudera    Required: pseudo-distributed configuration assumes this hostname
--privileged=true                 Required: for HBase, MySQL-backed Hive metastore, Hue, Oozie, Sentry, and Cloudera Manager, and possibly others
-t                                Required: once services are started, a Bash Shell takes over and will die without this
-i                                Required: if you want to use the terminal, either immediately or attach later
-p 8888                           Recommended: maps the Hue port in the guest to another port on the Host
-p [PORT]                         Optional: map any other ports (e.g. 7180 for Cloudera Manager, 80 for a guided tutorial)
-d                                Optional: runs the container in the background
0