docker错误 – “jq:错误:无法遍历空”
所以我试图在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'
日志中没有任何其他错误。 我的Docker容器是成功构build的,所以看起来似乎不太可能从那里发生错误。
我的Dockerrun.aws.json如下所示:
{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "blah", "Update": "false" }, "Ports": [ { "ContainerPort": "8080" } ] }
我用这一个敲我的头撞墙,没有任何改变似乎影响它,谷歌search没有任何帮助。
有任何想法吗?
问题是您的Dockerrun.aws.json文件缺lessVolumes
属性。
04pre.sh脚本使用jq工具来查询JSON文件。
具体来说,它会在您的文件上运行以下命令,这会导致错误:
$ jq -c '.Volumes[] | [.HostDirectory, .ContainerDirectory]' < Dockerrun.aws.json jq: error: Cannot iterate over null
指定一个空的“卷”数组应该可以解决这个错误。
如果其他人正在寻找如何避免在自己的jq
命令中Cannot iterate over null
错误,请在[]
后面添加一个问号。 例如
echo '{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "blah", "Update": "false" }, "Ports": [ { "ContainerPort": "8080" } ] }'|jq -c '.Volumes[]?|[.HostDirectory,.ContainerDirectory]'
哪里[]
被replace为[]?
不显示错误。
从手册:
.[]? Like .[], but no errors will be output if . is not an array or object.
请注意,由于各种不同的原因,Elastic Beanstalk部署到Docker平台可能会因Elastic Beanstalk部署的各个阶段中的“jq:error …无法迭代null …”错误消息而失败。 这可能包括您的应用程序(Docker容器)在启动时退出或错误。
虽然这个特定的报告发生的问题可能是特定于Dockerrun.aws.json中缺less“卷”属性,您的问题可能不会。 如果出现此错误,那么诊断问题的最佳方法是下载完整的EB日志,并在以下日志文件/var/log/eb-activity.log中检查诊断。
如果问题是由于您的应用程序无法启动导致的,那么您会在/var/log/eb-docker/containers/eb-current-app/unexpected-quit.log中find该错误。
在我的情况下,问题是由Dockerfile中的ADD
而不是COPY
指令造成的。 改变它解决了这个问题。
- ElasticBeanstalk:存放一个防弹的docker集装箱
- eb本地运行vs eb部署?
- 如何在AWS Elastic Beanstalk Docker容器中loggingPHP错误
- 将Perl Docker容器部署到Elastic Beanstalk
- Elastic Beanstalk CLI – 不replace部署上的实例
- 在AWS Elastic Beanstalk应用程序中运行Tomcat Docker时进行端口转发
- 对于Web应用程序,为模板和api服务器分配两个容器是否有意义?
- Ubuntu版本更新错误与Docker和ElasticBeanstalk
- 如何从ElasticBeanstalk应用程序实例检索正在运行的版本?