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)
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中找到错误.
| 归档时间: |
|
| 查看次数: |
16957 次 |
| 最近记录: |