Docker错误-“jq:error:Cannot trigger over null”

h43kikqp  于 11个月前  发布在  Docker
关注(0)|答案(5)|浏览(231)

因此,我试图在Elastic Beanstalk上部署一个dockerfile,但我无法通过这个错误-“jq:error:Cannot overnull”。

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'

字符串
日志中没有任何其他错误。我的Docker容器已成功构建,因此错误似乎不太可能来自那里。
我的Dockerrun.aws.json看起来像:

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


我的头撞在墙上,这一个,我改变似乎没有影响它和谷歌没有任何帮助。
有什么想法吗?

fxnxkyjh

fxnxkyjh1#

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

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

字符串
其中[]被替换为[]?不会显示错误。
从手册:

.[]?
    Like .[], but no errors will be output if . is not an array or object.

oaxa6hgo

oaxa6hgo2#

问题是您的Dockerrun.aws.json文件缺少Volumes属性。
04pre.sh脚本使用jq工具来查询JSON文件。
具体来说,它会在您的文件上运行以下命令,这会产生一个错误:

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

字符串
如果是空的“”数组,则应解决此错误。

yquaqz18

yquaqz183#

请注意,在Elastic Beanstalk部署的各个阶段,由于各种不同的原因,Elastic Beanstalk部署到Docker平台可能会失败,并显示“jq:error. Cannot disrupt over null.”错误消息。这可能包括您的应用程序(Docker容器)退出或启动时出错。
虽然这个报告的问题可能是由于Dockerrun.aws.json中缺少了一个“req”属性,但你的问题可能不是。如果你得到这个错误,那么诊断问题的最好方法是下载完整的EB日志,并在下面的日志文件/var/log/eb-activity. log中检查诊断。
如果问题是由于应用程序无法启动而导致的,那么您将在/var/log/eb-docker/containers/eb-current-app/unexpected-quit.log中找到错误。

vm0i2vca

vm0i2vca4#

在我的例子中,问题是由Dockerfile中的ADD而不是COPY指令引起的。更改它解决了这个问题。

lnxxn5zx

lnxxn5zx5#

对我来说,我已经在运行jq命令后检查结果是否为空,所以我只是在查询的开头添加了try

之前

$myJson | jq -r '.data[0].tags.version[] | select(startswith(""chart-"")) | sub(""chart-"";"""")'

字符串

之后

$myJson | jq -r 'try .data[0].tags.version[] | select(startswith(""chart-"")) | sub(""chart-"";"""")'


如果结果是空的,我会相应地采取行动。

相关问题