J'ai écrit le fichier docker suivant
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"]
j'ai construit mon image en utilisant la commande
docker build --tag foobar:auto .
La sortie de cette commande était
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
Mais quand j'essaye de lancer mon conteneur en utilisant
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
Je reçois une erreur
docker: Error response from daemon: rpc error: code = 2 desc = "oci runtime error: exec format error".
Mon fichier entrypoint.sh ressemble à
/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
Avez-vous posté votre entrypoint.sh
? .__ complet? Le noyau tente de reconnaître le type de fichier en examinant les premiers octets de l'exécutable. Pour les scripts, vous devez ajouter une ligne Shebang line. Vous devrez peut-être ajouter une ligne Shebang tout en haut de votre entrypoint.sh
, par exemple:
#!/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
Réponse d'erreur du démon: erreur rpc: code = 2 desc = "erreur d'exécution oci: erreur de format exec"
Dans mon cas, j'ai eu cette erreur en essayant d'installer Docker sur un ArchLinux 32 bits (un Raspberry Pi 2). Au lieu de cela, j’ai utilisé HyperioOS et c’est devenu beaucoup plus lisse et l’installation a été beaucoup plus rapide. Mais au final, la plupart des images de docker ne sont pas compatibles avec les architectures 32 bits et elles le décrivent comme raison possible d’obtenir cette erreur.
Ici, nous courons Docker sur un Raspberry Pi. Ainsi, l’architecture du processeur ici est ARM plutôt que x86/x64 par Intel ou AMD. Ainsi, les applications basées sur Docker que vous utilisez doivent être packagées spécifiquement pour l'architecture ARM! Les applications basées sur Docker packagées pour x86/x64 ne fonctionneront pas et entraîneront une erreur
Selon la documentation de Cloudera vous devriez commencer par --hostname
et --priviliged
De la docs
docker run --hostname=quickstart.cloudera --privileged=true -t -i [OPTIONS] [IMAGE] /usr/bin/docker-quickstart
Les explications relatives aux indicateurs obligatoires et aux autres options figurent dans le tableau suivant:
--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