Docker错误 - "jq:错误:无法迭代null"

YYZ*_*YYZ 28 amazon-web-services docker jq amazon-elastic-beanstalk

所以我试图在Elastic Beanstalk上部署dockerfile,但我无法通过这个错误 - "jq:error:无法迭​​代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'
Run Code Online (Sandbox Code Playgroud)

日志中没有任何其他错误.我的Docker容器已成功构建,因此似乎不太可能出现错误.

我的Dockerrun.aws.json看起来像:

   {
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "blah",
    "Update": "false"
  },
  "Ports": [
    {
      "ContainerPort": "8080"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我正用这一个撞墙撞墙,我改变的任何东西似乎都没有影响它,谷歌搜索没有任何帮助.

有任何想法吗?

nis*_*ama 32

如果其他人正在寻找如何避免Cannot iterate over null他们自己的jq命令中的错误,请在之后添加问号[].例如

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

[]被替换的地方[]?不显示错误.

从手册:

.[]?
    Like .[], but no errors will be output if . is not an array or object.
Run Code Online (Sandbox Code Playgroud)

  • @JDS @nobody,请参阅[此处](/sf/answers/2983605621/)的答案 - 由于“jq”是一个单一的、自包含的二进制文件,因此您可以使用较新的版本覆盖您的 apt 版本版本,例如[版本1.5](https://github.com/stedolan/jq/releases/tag/jq-1.5) (2认同)

cbl*_*ley 29

问题是您的Dockerrun.aws.json文件缺少该Volumes属性.

04pre.sh脚本使用jq工具来查询JSON文件.

具体来说,它在您的文件上运行以下命令,这会产生错误:

$ jq -c '.Volumes[] | [.HostDirectory, .ContainerDirectory]' < Dockerrun.aws.json
jq: error: Cannot iterate over null
Run Code Online (Sandbox Code Playgroud)

指定一个空的"Volumes"数组应解决该错误.


小智 12

请注意,由于各种不同的原因,在Elastic Beanstalk部署的各个阶段中,对Docker平台的Elastic Beanstalk部署可能会失败,并出现"jq:error ...无法迭代空..."错误消息.这可能包括您的应用程序(Docker容器)在启动时退出或出错.

虽然这个特定报告的问题可能是特定于Dockerrun.aws.json中缺少的"Volumes"属性,但您的问题可能不是.如果出现此错误,那么诊断问题的最佳方法是下载完整的EB日志并检查以下日志文​​件/var/log/eb-activity.log中的诊断信息.

如果问题是由您的应用程序无法启动引起的,那么您将在/var/log/eb-docker/containers/eb-current-app/unexpected-quit.log中找到错误.

  • 要了解此错误消息的替代原因:我的原因是内存不足. (3认同)