Erreur Docker - " jq: erreur: ne peut pas itérer sur null"

J'essaie donc de déployer un fichier dockerfile sur Elastic Beanstalk, mais je ne peux pas dépasser cette erreur - "jq: error: Cannot iterate over null".

Successfully built [myContainerId]
Successfully built aws_beanstalk/staging-app
[2015-01-29T10:35:59.494Z] INFO  [16343] - [CMD-AppDeploy/AppDeployStage0/AppDeployPreHook/04run.sh] : Starting activity...
[2015-01-29T10:36:05.507Z] INFO  [16343] - [CMD-AppDeploy/AppDeployStage0/AppDeployPreHook/04run.sh] : Activity execution failed, because: command failed with error code 1: /opt/elasticbeanstalk/hooks/appdeploy/pre/04run.sh
jq: error: Cannot iterate over null
Docker container quit unexpectedly after launch: Docker container quit unexpectedly on Thu Jan 29 10:36:05 UTC 2015:. Check snapshot logs for details. (Executor::NonZeroExitStatus)
at /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/executor-1.0/lib/executor/exec.rb:81:in `sh'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/executor-1.0/lib/executor.rb:15:in `sh'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.1/lib/elasticbeanstalk/executable.rb:63:in `execute!'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.1/lib/elasticbeanstalk/hook-directory-executor.rb:29:in `block (2 levels) in run!'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.1/lib/elasticbeanstalk/activity.rb:169:in `call'
from /opt/elasticbeanstalk/lib/ruby/lib/ruby/gems/2.1.0/gems/beanstalk-core-1.1/lib/elasticbeanstalk/activity.rb:169:in `exec'

Il n'y a pas d'autres erreurs dans les logs. Mon conteneur Docker est construit avec succès, il semble donc peu probable que l'erreur Vienne de là.

Mon Dockerrun.aws.json ressemble à :

   {
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "blah",
    "Update": "false"
  },
  "Ports": [
    {
      "ContainerPort": "8080"
    }
  ]
}

je frappe ma tête contre un mur avec celui-ci, rien que je change semble l'affecter et googler n'a pas été d'aucune aide.

des idées?

22
demandé sur charles ross 2015-01-29 14:10:49

4 réponses

Volumes propriété.

Le 04pre.sh script utilise le jq outil permettant d'interroger le fichier JSON.

plus précisément, il exécute la commande suivante sur votre fichier, qui donne lieu à une erreur:

$ jq -c '.Volumes[] | [.HostDirectory, .ContainerDirectory]' < Dockerrun.aws.json
jq: error: Cannot iterate over null

spécifier un tableau "Volumes" vide devrait résoudre l'erreur.

22
répondu cbley 2015-02-03 15:08:22

Si d'autres cherchent comment éviter le Cannot iterate over null erreur dans leur propre jq commandes, ajouter un point d'interrogation après []. Par exemple,

echo '{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "blah",
    "Update": "false"
  },
  "Ports": [
    {
      "ContainerPort": "8080"
    }
  ]
}'|jq -c '.Volumes[]?|[.HostDirectory,.ContainerDirectory]'

[] a été remplacé par []? n'affiche pas l'erreur.

manuel:

.[]?
    Like .[], but no errors will be output if . is not an array or object.
22
répondu user4669748 2016-04-07 19:25:42

notez qu'un déploiement élastique de la tige de haricot à la plate-forme Docker peut échouer avec le "jq: error ... Ne peut itérer sur null..."message d'erreur dans les différentes phases d'un déploiement élastique en haricot magique, pour différentes raisons. Cela peut inclure votre application (conteneur Docker) en cessant ou en errorant au démarrage.

bien que ce cas particulier signalé du problème ait pu être spécifique à une propriété "Volumes" manquante à Dockerrun.aws.json, ton problème n'est peut-être pas être. Si vous obtenez cette erreur, alors la meilleure façon de diagnostiquer le problème est de télécharger vos journaux EB complets et de vérifier les diagnostics dans le fichier journal suivant /var/log/eb-activity.journal.

si le problème a été causé par le défaut de démarrage de votre application, alors vous trouverez l'erreur dans /var/log/eb-docker/containers/eb-current-app/unexpected-quit.journal.

10
répondu Neil Brown 2016-03-09 11:09:51

Dans mon cas problème a été causé par ADD dans Dockerfile au lieu de COPY instruction. Changer résolu le problème.

0
répondu Victor 2017-09-11 09:17:46