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