Posted at

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

More than 1 year has passed since last update.


背景

先日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のエラーログ…。

今回は関連するログを網羅的に見ました。

少しでも同じログにぶつかった人の参考になればと思います。