2016-04-15 2 views
15

Я написал следующий Docker файлDocker: ответ ошибки от демона: ошибка RPC: код = 2 убывания = «ОКА Ошибка: 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 
+1

Для начала, я думаю, вы можете ввести в заблуждение 'CMD' и' RUN'. – larsks

+2

Две ошибки в файле Docker: CMD должен быть RUN, а EXPOSE не должен содержать отображение (только порт). –

+0

Я внес изменения, которые вы, ребята, предложили ... но по-прежнему та же проблема. Я обновил свой код выше. Пожалуйста, ознакомьтесь с обновленным кодом. –

ответ

27

ли вы разместите полный entrypoint.sh? Ядро пытается распознать тип файла, просмотрев первые байты исполняемого файла. Для скриптов вам необходимо добавить так называемую строку 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 
+0

Я получал эту ошибку, и я исправил ее, просто посмотрев на ваш пример. Мой shebang был не прав, '#/bin/bash'. – gustavohenke

+0

Просто комментарий к этому - это также случается с Кубернетами и зондами готовности. Вспомните об этих сумасшедших шабангах! – altanis

0

По Cloudera's documentation вы должны начать его с --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 
+0

сделал это (и обновленный код выше), но все та же ошибка –

2

Error response from daemon: rpc error: code = 2 desc = “oci runtime error: exec format error”

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

Here we run Docker on a Raspberry Pi. So the CPU architecture here is ARM rather than x86/x64 by Intel or AMD. Thus, Docker-based apps you use have to be packaged specifically for ARM architecture! Docker-based apps packaged for x86/x64 will not work and will result in an error

+0

Я пробовал Hyperio, и я все еще получаю вышеупомянутую ошибку. –

+1

Вы правы. Hyperiot не решает проблему, если вы используете изображение докеров, построенное для архитектуры чипов x86. В конце концов я отказался, потому что для чего-то, что нужно запустить на чипсете ARM, его нужно скомпилировать на чипе ARM. Это означает, что весь контейнер, вплоть до базового изображения, должен быть специально создан.И большинство контейнеров не построены для ARM – Erich

Смежные вопросы