前提・実現したいこと
docker-composeによるコンテナをfargateにデプロイしようとしています。
以下の記事を参考にサービス・機能の設定を進めました。
Dockerコンテナで作ったアプリをECS+RDSでデプロイする
したことはざっくり以下です。
- VPC作成
- パブリックサブネット・プライベートサブネット作成
- クラスター作成
- RDS用のサブネットグループ作成
- RDSインスタンス作成
- セキュリティグループ作成
- ECRにイメージのプッシュ
- application load balancer作成
- タスク定義
- サービス作成・タスク実行
発生している問題・エラーメッセージ
サービス作成・タスク実行を行ったのち、生成されたタスクのステータスを確認したところ、
PROVISIONING→PENDING→ACTIVATINGと遷移したのちSTOPPEDになり、RUNNINGとなりませんでした。
STOPPEDとなったタスクの詳細画面から停止理由を確認したところ以下のように記載されていました。
Essential container in task exited
原因について考えたこと・試したこと
調べたところこの停止理由は「タスク定義でessentialとマークしていたコンテナが終了もしくは停止した際に出る」もののようでした。
今回タスク内にコンテナは1つしかないため、要はその1つのコンテナが何かの理由で起動しなかったのだと認識しています。
理由を調べるためにコンテナのログをCloudWatchで確認しました。
しかしログイベントの項目には「現時点では古いイベントはありません」「現時点では新しいイベントはありません」とだけ表示されており他に情報はありませんでした。
※今回タスク実行ロールはecsTaskExecutionRoleを使用しております。このロールはデフォルトでCloudwatchLogsへのアクセス権限を与えられていないという情報を見たため、CloudWatchAgentServerPolicyのポリシーを付与してみましたが、CloudWatchに表示される内容に変化はありませんでした。
同じようなシチュエーションについて書いてある記事を探したところ、上記の事象は何らかの理由でECRからイメージをpullできていないために発生することが多い、みたいな情報を見つけましたが、どうすればよいか分からずそれで終わっています。
以下この事象の解消に関係ありそうだと思って読んでいた記事です。
- 停止されたタスクでのエラーの確認(AWS公式記事)
- Amazon ECS の Amazon ECR エラー「CannotPullContainerError: API error」を解決する方法を教えてください。(AWS公式記事)
- ECSでタスクが起動しない場合に確認すべきこと
この「fargateのタスクのステータスがRUNNINGにならない」事象の原因および対応策について、何かご意見をいただけますと幸いです。よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
MAC OS
追記
Dockerfile
FROM ruby:2.7.1 # 必要なパッケージのインストール RUN apt-get update -qq && \ apt-get install -y build-essential \ libpq-dev \ nodejs # yarnパッケージ管理ツールをインストール RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt-get update && apt-get install -y yarn # Node.jsをインストール RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \ apt-get install nodejs # chromeのインストール RUN apt-get update && apt-get install -y unzip && \ CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \ wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \ unzip ~/chromedriver_linux64.zip -d ~/ && \ rm ~/chromedriver_linux64.zip && \ chown root:root ~/chromedriver && \ chmod 755 ~/chromedriver && \ mv ~/chromedriver /usr/bin/chromedriver && \ sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \ sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \ apt-get update && apt-get install -y google-chrome-stable # 作業ディレクトリの作成、設定 RUN mkdir /myapp ##作業ディレクトリ名をAPP_ROOTに割り当てて、以下$APP_ROOTで参照 ENV APP_ROOT /myapp WORKDIR $APP_ROOT # ホスト側(ローカル)のGemfileを追加する(ローカルのGemfileは【3】で作成) ADD ./Gemfile $APP_ROOT/Gemfile ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock # Gemfileのbundle install RUN bundle install ADD . $APP_ROOT EXPOSE 3000 # RUN chmod +x /entrypoint.sh CMD ["/entrypoint.sh"]
entrypoint.sh
yarn install rm /app/tmp/pids/server.pid bin/rails s -p 3000 -b '0.0.0.0'
docker-compose.yml
version: '3' services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 本来は直書きしています MYSQL_DATABASE: 本来は直書きしています ports: - "3306:3306" # volumes: # - /var/lib/mysql 今回ECRにpushしたのはこのwebというコンテナのもとのイメージです web: build: . command: rails s -p 3000 -b '0.0.0.0' # volumes: # - .:/myapp # - /app/tmp ports: - "3000:3000" depends_on: - db stdin_open: true tty: true
回答1件
あなたの回答
tips
プレビュー