使用 ECS 上下文时向 `docker-compose` 传递环境变量

4
我正在尝试使用最新的Docker CLI公开的新ecs上下文。当我使用docker context create ecs my_context创建上下文时,我选择使用环境变量方法(推荐方式),但无论我如何调用docker compose,它总是返回消息context requires credentials to be passed as environment variables。在谷歌中搜索此消息没有任何结果:/。
我已经尝试使用-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

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

5个回答

3

我通过谷歌搜索找到了这篇文章(虽然我没有使用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

2
我认为在docker compose up命令期间传递变量是行不通的。它的工作方式是,您在shell中导出访问密钥ID、秘密访问密钥和区域变量,然后通过指向这些变量(如此处所示)来创建docker上下文。
您可以通过启动docker context create ecs myecscontext并选择AWS环境变量来交互式地执行此操作,或者您可以直接运行docker context create ecs myecscontext --from-env
是的,如果您指的是这个问题,那么区域错误确实很烦人。

是的,那就是地区的问题 :S 在Windows shell中没有导出选项,这可能是我遇到困难的原因。 - raydenl
哇!Windows... :)...这是一个15年前的回忆。开玩笑的说...我从来没有在Windows上使用过它,但我猜SET(而不是EXPORT)应该可以吧? - mreferre
是的,我试过很多次使用SET命令,甚至手动添加环境变量,但它不会识别它们。不过有一件有趣的事情我发现了,docker-compose命令行工具会自动读取.env文件中的变量,即使没有用--env-file标志指定文件,看起来像是另一个bug :S 但是对于ecs集成,我需要使用新的compose选项来运行docker命令行工具... 我不认为它会像之前那样读取.env文件,否则我可能就不会遇到这个问题了 :D - raydenl
可以确认,使用docker compose -f docker-compose.build.yml build命令默认会同时读取同一位置的.env文件。 - raydenl

0

我不得不使用 source ~/.bash_profile 来重新加载我的终端,因为我使用的是 .bashrc 作为我的源文件,但它里面没有我的环境变量。


0

使用配置 AWS CLI 的环境变量在 Linux 或 MacOs 上修改和导出环境变量:

  • 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 context create ecs CONTEXT [flags]

标志:

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

答案: docker context create ecs CONTEXT --from-env


0

我已通过设置环境变量来处理此问题。您可以参考此指南进行操作。


1
您的回答可以通过提供更多支持性信息来改进。请[编辑]以添加进一步的细节,如引文或文档,以便他人可以确认您的回答是正确的。您可以在帮助中心找到有关编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接