そのため、Elastic Beanstalkにdockerfileをデプロイしようとしていますが、このエラー-「jq:エラー: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コンテナーは正常にビルドされているため、そこからエラーが発生する可能性は低いようです。
私のDockerrun.aws.jsonは次のようになります。
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "blah",
"Update": "false"
},
"Ports": [
{
"ContainerPort": "8080"
}
]
}
私はこれで壁に頭を叩いていますが、私が変更したものは何もそれに影響を与えないようで、グーグルは何の助けにもなりませんでした。
何か案は?
他の人が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.
問題は、Dockerrun.aws.jsonファイルにVolumes
プロパティがないことです。
04pre.shスクリプトは、JSONファイルを照会するために jq ツールを使用します。
具体的には、ファイルに対して次のコマンドを実行し、エラーが発生します。
$ jq -c '.Volumes[] | [.HostDirectory, .ContainerDirectory]' < Dockerrun.aws.json
jq: error: Cannot iterate over null
空の「ボリューム」配列を指定すると、エラーが解決するはずです。
DockerプラットフォームへのElastic Beanstalkデプロイは、さまざまな理由でElastic Beanstalkデプロイのさまざまなフェーズで「jq:エラー... nullを反復処理できません...」エラーメッセージで失敗する可能性があることに注意してください。これには、アプリケーション(Dockerコンテナ)の起動時の終了またはエラーが含まれます。
この特定の報告された問題の発生は、Dockerrun.aws.jsonで欠落している「ボリューム」プロパティに固有である可能性がありますが、問題はそうではない可能性があります。このエラーが発生した場合、問題を診断する最善の方法は、完全なEBログをダウンロードし、次のログファイル/var/log/eb-activity.logで診断を確認することです。
問題の原因がアプリケーションの起動に失敗した場合、/ var/log/eb-docker/containers/eb-current-app/unexpected-quit.logにエラーがあります。
私の場合、問題はADD
命令ではなくDockerfileのCOPY
が原因でした。変更すると問題が修正されました。