2015-07-18 12 views
8

Viene visualizzato un errore criptico quando si tenta di aggiornare la configurazione di un'applicazione Docker a contenitore singolo. Qualcuno ha un'idea di cosa potrebbe causare questo, o come fare per debuggarlo?Errore docker 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) 

risposta

8

Ho visto questo prima, e credo che questo accada quando il contenitore Docker non è riuscito a costruire. Il comando che ha avuto esito negativo è quello in cui è in esecuzione il contenitore e non riesce (IIRC) perché non riesce a trovare il contenitore dal passaggio di generazione precedente. Cose da provare:

4

E ' potrebbe accadere se l'applicazione non riesce ad avviarsi correttamente la prima volta che viene distribuita. Ho appena iniziato ad avere questo problema da solo.

Date un'occhiata al /var/log/eb-activity.log sul server ... si può vedere qualcosa di simile:

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

Avanti, guarda/var/log/EB-finestra mobile/contenitori/eb-current-app Se viene visualizzato un rilascio inatteso, il log deve contenere gli errori registrati dall'applicazione durante il tentativo, avviato senza successo.

Sfortunatamente, nel mio caso, non è possibile iniziare perché manca una variabile di ambiente. Tuttavia, AWS mi impedisce di aggiornare la configurazione mentre il beanstalk si trova in questo stato. E non posso specificare le variabili di ambiente mentre creo l'ambiente. Quindi non sono sicuro di cosa farò per risolvere il problema.

+1

semplice modificare il vostro gruppo ridimensionamento automatico associato al vostro ambiente e impostare un numero desiderato di istanze da 0 (lo stesso per min). Attendi fino a quando la tua istanza non viene distrutta. Quando l'ambiente Beanstalk non ha istanza, aggiorna le variabili di ambiente.Attendere il completamento dell'aggiornamento. Cambia il tuo gruppo di ridimensionamento automatico. TADAAAAA, hai risolto il tuo problema :) – kiddouk

+2

Ho lo stesso identico problema di quello di Shannon. @kiddouk la tua soluzione non funziona per me, EB si è lamentato del fatto che il valore deve essere> = 1. – syg

+1

@Shannon vedi la mia soluzione alternativa sotto – syg

4

Ho esattamente lo stesso problema di @ Shannon. La mia soluzione è

  • prima, distribuire un campione Dockerfile che garantisce di lavorare,
  • poi messa a punto tutte le variabili d'ambiente mia vera applicazione Docker avrebbe bisogno,
  • finalmente ridistribuire l'applicazione reale Docker.

Un campione Dockerfile copia-incollato da 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

Questo è il modo più pulito per farlo penso ... no script, solo un po 'di hacking per ottenere il progetto da terra e impostare le variabili env. +1 – bonez

+1

La delusione di AWS richiede un attacco come questo per quello che immagino sia uno scenario comune. Dovresti essere in grado di impostare env vars quando configuri l'ambiente nell'interfaccia utente web. Grazie per l'utile soluzione nel frattempo. –

1

È possibile fornire le variabili di ambiente sulla riga di comando nella eb creare e EB clone comandi. Questi sono impostati prima del l'attività di creazione o clonazione in modo che l'ambiente li trovi impostati.

Vedere la guida di eb cli. Per esempio ...

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