2015-07-18 16 views
8

Otrzymuję tajemniczy błąd podczas próby zaktualizowania konfiguracji aplikacji Docker z jednym kontenerem. Ktoś ma pomysł na to, co może to spowodować, lub jak to zrobić z debugowaniem?Błąd dockera Elastic Beanstalk

ERROR [3009] : Command execution failed: 
    [CMD-ConfigDeploy/ConfigDeployStage0/ConfigDeployPreHook/00run.sh] 
    command failed with error code 1: 
    /opt/elasticbeanstalk/hooks/configdeploy/pre/00run.sh 
    docker: "tag" requires 2 arguments. See 'docker tag --help'. 
    (ElasticBeanstalk::ActivityFatalError) 

Odpowiedz

8

Widziałem to już wcześniej i wierzę, że dzieje się tak, gdy kontener Dockera nie został zbudowany. Polecenie, które się nie powiodło, to polecenie, które uruchamia twój kontener, i jego awaria (IIRC), ponieważ nie może znaleźć kontenera z poprzedniego kroku kompilacji. Rzeczy do wypróbowania:

4

It może się zdarzyć, jeśli aplikacja nie uruchomi się pomyślnie przy pierwszym uruchomieniu. Właśnie zacząłem mieć ten problem sam.

Spójrz na /var/log/eb-activity.log na serwerze ... można zobaczyć coś takiego:

[2015-07-23T00:19:11.015Z] INFO [2624] - [CMD-Startup/StartupStage1/AppDeployEnactHook/00run.sh] : Starting activity...

[2015-07-23T00:19:17.506Z] INFO [2624] - [CMD-Startup/StartupStage1/AppDeployEnactHook/00run.sh] : Activity execution failed, because: jq: error: Cannot iterate over null aca80d7accfe4800ff04992e2f89a1e05689423d286deee31b53bf470ce89afb Docker container quit unexpectedly after launch: bleBeanFactory.java:942) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533) ... 93 more. Check snapshot logs for details. (ElasticBeanstalk::ExternalInvocationError) caused by: jq: error: Cannot iterate over null aca80d7accfe4800ff04992e2f89a1e05689423d286deee31b53bf470ce89afb Docker container quit unexpectedly after launch: bleBeanFactory.java:942) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533) ... 93 more. Check snapshot logs for details. (Executor::NonZeroExitStatus)

[2015-07-23T00:19:17.506Z] INFO [2624] - [CMD-Startup/StartupStage1/AppDeployEnactHook/00run.sh] : Activity failed.

[2015-07-23T00:19:17.507Z] INFO [2624] - [CMD-Startup/StartupStage1/AppDeployEnactHook] : Activity failed.

[2015-07-23T00:19:17.507Z] INFO [2624] - [CMD-Startup/StartupStage1] : Activity failed.

[2015-07-23T00:19:17.507Z] INFO [2624] - [CMD-Startup] : Completed activity. Result: Command CMD-Startup(stage 1) failed.

Następnie spojrzeć w/var/log/EB-dokowanym/containers/eb-current-app Jeśli zobaczysz nieoczekiwany-quit.log, to powinien on zawierać błędy, które twoja aplikacja zalogowała się, tak jak próbowała, bez powodzenia, aby rozpocząć.

Niestety, w moim przypadku nie można uruchomić, ponieważ brakuje zmiennej środowiskowej. AWS uniemożliwia jednak aktualizację konfiguracji, gdy komponent beanstalk znajduje się w tym stanie. I nie mogę określić zmiennych środowiskowych podczas tworzenia środowiska. Więc nie jestem pewien, co zrobię, aby rozwiązać problem.

+1

Prosta edycja grupa automatycznego skalowania związane ze środowiskiem i ustawić żądaną liczbę wystąpień 0 (sam za min). Zaczekaj, aż instancja zostanie zniszczona. Gdy środowisko Beanstalk nie ma instancji, zaktualizuj zmienne środowiskowe.Poczekaj na zakończenie aktualizacji. Zmień z powrotem grupę automatycznego skalowania. TADAAAAA, rozwiązałeś swój problem :) – kiddouk

+2

Mam dokładnie ten sam problem co Shannon. @kiddouk Twoje rozwiązanie nie działa dla mnie, EB poskarżył się, że wartość musi być> = 1. – syg

+1

@ Shannon zobacz moje obejście poniżej – syg

4

Mam dokładnie ten sam numer co @ Shannon. Moje obejście jest

  • najpierw wdrożyć próbki Dockerfile który gwarantuje pracę,
  • następnie skonfigurować wszystkie zmienne środowiskowe moja prawdziwa aplikacja Docker musiałby,
  • wreszcie przesunięcie prawdziwą aplikację Docker.

Próbkę Dockerfile kopiowaniem wklejony z AWS documentation:

FROM ubuntu:12.04 

RUN apt-get update 
RUN apt-get install -y nginx zip curl 

RUN echo "daemon off;" >> /etc/nginx/nginx.conf 
RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master 
RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip 

EXPOSE 80 

CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"] 
+0

To jest najczystszy sposób, aby zrobić, myślę ... żadnych skryptów, po prostu trochę hack aby uzyskać projekt od podstaw i ustawić zmienne env. +1 – bonez

+1

Rozczarowujące AWS wymaga takiego hakowania, ponieważ wyobrażam sobie, że jest to typowy scenariusz. Powinieneś być w stanie ustawić env vars podczas konfigurowania środowiska w interfejsie internetowym. Dzięki za pomocne rozwiązanie w międzyczasie. –

1

Można podać swoje zmienne środowiskowe w wierszu poleceń w eb tworzyć i EB klon poleceń. Są one ustawione przedprzed utworzeniem lub sklonowaniem zadania, aby środowisko stworzyło je ustawione.

Zobacz pomoc eb cli. Na przykład ...

$ eb create -h ... --envvars ENVVARS a comma-separated list of environment variables as key=value pairs ...

Powiązane problemy