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?
4 réponses
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.
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]'
où []
a été remplacé par []?
n'affiche pas l'erreur.
manuel:
.[]?
Like .[], but no errors will be output if . is not an array or object.
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.
Dans mon cas problème a été causé par ADD
dans Dockerfile au lieu de COPY
instruction. Changer résolu le problème.