LoginSignup
4

More than 5 years have passed since last update.

Elastic BeanstalkでDockerを試す際にぶつかったエラー

Posted at

背景

先日Amazon Linuxの公式コンテナイメージが公開されたので
以下のようなアプリケーション開発のフローを導入しようと考えました。

  1. Docker for MacでAmazon Linuxのコンテナを作成
  2. コンテナのイメージをElastic Container Registry(ECR)に置く
  3. Elastic Beanstalk(EB)にデプロイ

実装前にざっと試してみた際にハマったエラーについて書きます。

現象

DockerfileでAmazon Linuxをベースイメージとしたコンテナを作成し
それをECRにpushしたあと、EBにdockerrun.aws.jsonを渡すフローでした。

しかし、dockerrun.aws.jsonをEBに渡したあと
正常にデプロイが開始されたあと、以下のようなエラーが出ました。

マネジメントコンソール上のエラーログ
[Instance: i-95ad6d0b] Command failed on instance. Return code: 1 Output: 563f980e33e19b2b43cbf556249bba19de0f5bf2f69d1b6cb67a3fc997ce6468 Docker container quit unexpectedly after launch: Docker container quit unexpectedly on Sat Nov 19 15:02:16 UTC 2016:. Check snapshot logs for details. Hook /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.

原因がよくわからないので、/var/log/eb-activity.logを確認します。
インスタンスは正常に起動しているので、$ eb sshで接続も可能です。

/var/log/eb-activity.logから抜粋
[2016-11-19T15:02:16.395Z] INFO  [3459]  - [Application deployment First Release@1/StartupStage1/AppDeployEnactHook/00run.sh] : Activity execution failed, because: 563f980e33e19b2b43cbf556249bb
a19de0f5bf2f69d1b6cb67a3fc997ce6468

曰く、原因はやはり563f980e33e19b2b43cbf556249bb
a19de0f5bf2f69d1b6cb67a3fc997ce6468
です。さっぱりわかりません。

原因

以下に抜粋したログ曰く、新しいイメージのビルドは正常に終了しているので
コンテナの起動自体はうまくいっているように思えます。

/var/log/eb-activity.logから抜粋
Step 1 : FROM 405040101050.dkr.ecr.ap-northeast-1.amazonaws.com/ecr_eb_test:latest
 ---> ed42ad0aada6
Step 2 : EXPOSE 80
 ---> Running in be7d342bdfd1
 ---> 42ae4c2ba2df
Removing intermediate container be7d342bdfd1
Successfully built 42ae4c2ba2df
Successfully built aws_beanstalk/staging-app

dockerのイベントログを見てみると

/var/log/docker-events.log
2016-11-20T06:45:22.851433959Z container start 99b8db428bb7a404e485929b98c6653e9cc7a170503e1b31dc4d0890a0161f21 (image=3f7f5bfd4721, name=backstabbing_mcclintock)
2016-11-20T06:45:22.877845383Z container die 99b8db428bb7a404e485929b98c6653e9cc7a170503e1b31dc4d0890a0161f21 (exitCode=0, image=3f7f5bfd4721, name=backstabbing_mcclintock)

コンテナが起動後に即死しているのがわかります。
なんとなく問題が見えてきました。

このときに使用していたDockerfileの記述は以下の通りです。

Dockerfile(良くない例)
# ベースイメージとしてamazonlinuxを使用
FROM amazonlinux:latest

# 80番ポートを開放
EXPOSE 80

# このファイルを元にコンテナが動いていることの確認用
RUN touch /opt/test

フォアグラウンドのプロセスが存在しないため、コンテナが保持されませんね。

解決

以下のように書き直すと正常にデプロイできました。

Dockerfile
# ベースイメージとしてamazonlinuxを使用
FROM amazonlinux:latest

# 80番ポートを開放
EXPOSE 80

# apacheをインストール
RUN yum install -y httpd

# apacheをフォアグラウンドで起動
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]

まとめ

後になってみると、非常に初歩的なミスでした。
Dockerの基礎を理解していればすぐにわかります。

しかし、原因をまったく教えてくれないEBのエラーログ…。
今回は関連するログを網羅的に見ました。
少しでも同じログにぶつかった人の参考になればと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4