使用 ecs 上下文时将环境变量传递给“docker-compose”

Passing environment variables to `docker-compose` when using ecs context

我正在尝试使用最新 docker cli 公开的新 ecs 上下文。当我使用 docker context create ecs my_context 创建上下文时,我 select 使用环境变量方法(推荐方式),现在无论我如何尝试调用 docker compose,它总是 returns消息 context requires credentials to be passed as environment variables。正在 google returns 中搜索此消息:/

我尝试使用 -e--environment 标志传递,我尝试使用 .env 文件和 --env-file 标志。

docker --context my_ecs compose -f docker-compose.yml -f docker-compose.dev.yml -e AWS_ACCESS_KEY_ID=XXXXXXX -e AWS_SECRET_ACCESS_KEY=XXXXXXXX -e AWS_DEFAULT_REGION=XXXXXXXX up

如果我不使用环境变量方法,它会遇到另一个已知的(令人沮丧的)错误,即它使用错误的 aws 区域,即使上下文是使用正确的区域设置的。我觉得环境变量选项可以解决这个问题,如果我能让它看到环境变量的话。

我认为在 docker compose up 命令期间传递变量不起作用。它的工作方式是在 shell 中导出访问密钥 ID、秘密访问密钥和区域变量,然后通过指向变量 as shown here.[= 创建 docker 上下文16=]

您可以通过启动 docker context create ecs myecscontext 然后选择 AWS environment variables 以交互方式执行此操作,或者您可以 运行 docker context create ecs myecscontext --from-env.

是的,区域错误很烦人,如果 this 是您所指的。

Google 搜索引导我到这个 post,(我没有使用 Windows 但 aws cloud9 IDE,) 我可以通过将虚拟值传递给环境变量来摆脱消息 context requires credentials to be passed as environment variables,它是这样的。

$ docker context create ecs myecscontext 
? Create a Docker context using: AWS environment variables
Successfully created ecs context "myecscontext"
$ docker context use myecscontext                                                                    
myecscontext
$ docker context ls
context requires credentials to be passed as environment variables
$ 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

我不得不使用 source ~/.bash_profile 为我的终端提供资源,因为我使用 .bashrc 作为我的源,并且其中没有我的环境变量。

在 Linux 或具有 Environment variables to configure the AWS CLI 的 MacO 上修改和导出环境变量:

  • export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
  • export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  • export AWS_DEFAULT_REGION=us-west-2

稍后,您可以使用此命令查看选项:

docker context create ecs --help

说明:为 Amazon ECS 创建上下文

用法: docker 上下文创建 ecs CONTEXT [标志]

标志:

  • --access-keys string :使用文件中的 AWS 访问密钥
  • --description string:上下文描述
  • --from-env:使用 AWS 环境变量作为配置文件或凭证和区域
  • -h--help:ecs 帮助
  • --local-simulation :为ECS本地模拟端点创建上下文
  • --profile string :使用现有的 AWS 配置文件

回答docker context create ecs CONTEXT --from-env