Подтвердить что ты не робот

Docker: ошибка ответа от демона: ошибка rpc: code = 2 desc = "oci ошибка времени выполнения: ошибка формата exec"

Я написал следующий файл докеров

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

Ответ 1

Вы отправили свой полный entrypoint.sh? Ядро пытается распознать тип файла, просматривая первые байты исполняемого файла. Для скриптов вам нужно добавить так называемую shebang строку. Вам может потребоваться добавить строку shebang в самой верхней части вашего entrypoint.sh, например:

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

Ответ 2

Ошибка ответа от демона: ошибка rpc: code = 2 desc = "oci ошибка времени выполнения: ошибка формата exec"

В моем случае я получил эту ошибку при попытке установить докер на 32-битный ArchLinux (малина pi 2). Вместо этого я использовал HyperioOS, и он стал намного более плавным и был намного быстрее установлен. Но в итоге большинство изображений докеров несовместимы с 32-битными архитектурами и они описывают это как возможную причину для получения этой ошибки.

Здесь мы запускаем Докера на Малиновой Пи. Таким образом, архитектура процессора здесь представляет собой ARM, а не x86/x64 от Intel или AMD. Таким образом, приложения Docker, которые вы используете, должны быть упакованы специально для архитектуры ARM! Приложения на докере, упакованные для x86/x64, не будут работать и приведут к ошибке

Ответ 3

Согласно документации Cloudera, вы должны начать с --hostname и --priviliged

Из документов

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

Объяснение для обязательных флагов и других параметров приведено в следующей таблице:

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