LoginSignup
8
3

More than 1 year has passed since last update.

"context requires credentials to be passed as environment variables"の対処法

Last updated at Posted at 2021-09-12

エラー内容

Docker ComposeのAmazon ECSデプロイを試してみた

上の記事を参考にAWSのコンテナ基盤であるECSの概要を理解しようとぽちぽち触っていたところ、contextを作成するために下のコードを実行すると記事にはない選択項目が出現。

$ docker context create ecs myecscontext

> AWS secret and token credentials
  AWS environment variables

挙動を確認するためと軽い気持ちで2つめのAWS environment variablesを選択したところ,

contextの作成に成功したようですが記事のように内容の入力が求められませんでした。

Successfully created ecs context "myecscontext"

気にせず作成したcontextをuseするために下のコードを実行すると悲劇が起きました。

$ docker context use myecscontext

docker compose upすると

$ docker compose up

context requires credentials to be passed as environment variables

当然何も入力していないcontextなのでこういう挙動なのだなと確認してcontextをdefaultに戻そうとすると

$ docker context ls

context requires credentials to be passed as environment variables

contextが確認できません。

確認はできなくてもdefaultに戻せれば...と思って実行するも

$ docker context use default

context requires credentials to be passed as environment variables

完全にハマってしまいました。コマンド操作をするために元に戻す操作自体ができなくなってしまったのです。

しかしエラー文であるcontext requires credentials to be passed as environment variablesで検索しても全然情報が出てきません。

日本語の情報だけでは解決策がなかったのでついに愛用のMacを詰ませてしまったかと覚悟しましたが、英語のstackoverflowにて同じ悩みを抱えている人を発見。その方も情報が少ないことに悩んでいるようでしたが、回答者の1人が解決策を提示していました。。
Passing environment variables to docker-compose when using ecs context

解決策

$ AWS_SECRET_ACCESS_KEY=dummy AWS_ACCESS_KEY_ID=dummy AWS_DEFAULT_REGION=dummy docker context ls     
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT   ORCHESTRATOR
default             moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                         swarm
myecscontext *      ecs                 credentials read from environment                                                             
$ AWS_SECRET_ACCESS_KEY=dummy AWS_ACCESS_KEY_ID=dummy AWS_DEFAULT_REGION=dummy docker context use default
default
$ docker context ls
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT   ORCHESTRATOR
default *           moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                         swarm
myecscontext        ecs                 credentials read from environment                                                             
$ docker context rm myecscontext
myecscontext

まとめ

どうやらAWS environment variablesは文字通りAWSの環境変数を直接ターミナルに打ち込んでデプロイ できる仕組みのようでデタラメでも何かしらを環境変数に代入して実行する必要があったようです。

もちろん何がわからないかもわからない状態で操作してしまった私に非がありますが、どう言ったテンプレートで入力するべき状況で起きているエラーなのかを最低限エラーメッセージとして書いていて欲しかったなと感じました。

今の私には自力でこの解決方法にたどり着くことは不可能だったので、私のように時間を取られる人が1人でも減るように共有したいと思います。

8
3
0

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
8
3