如何为Docker Compose环境变量设置运行时变量

5

我正在创建一个docker compose文件,其中需要一些环境变量。其中一个env var来自于aws ssm参数。因此,我需要在构建docker镜像时查询aws ssm的值,并将该值作为环境变量之一。如何在docker compose文件中实现?

version: "2.3"
services:
  base:
    build:
      context: .
      args:
        - PYTHON_ENV=developmen
        - API_KEY= # find the value from ssm

你的 Dockerfile 是否定义了 API_KEY?只有当你的 Docker 容器包含该变量时,才能设置该变量。然后按照我的答案在 docker-compose 和 .env 文件中进行定义 https://stackoverflow.com/questions/57861914/load-environment-variables-from-env-file-with-docker-and-php/57873096#57873096#answer-57873096 - Jinna Balu
2个回答

8

在子shell中处理docker-compose文件中的ARGs并不容易,但您可以使用docker build命令和带有键值对的docker-compose来完成此操作。

使用docker-compose命令:

MY_KEY=$(aws  ssm get-parameter --name "test" --output text --query Parameter.Value) docker-compose build --no-cache

docker-compose

version: "2.3"
services:
  base:
    build:
      context: .
      args:
        - PYTHON_ENV=developmen
        - API_KEY=${MY_KEY}

在Dockerfile中定义ARG,并在构建时运行子shell以获取SSM参数值。
FROM alpine
ARG API_KEY=default
ENV API_KEY="$API_KEY"
RUN echo  "API_KEY is : $API_KEY"

在构建过程中,使用aws-cli获取值。

docker build --no-cache --build-arg API_KEY="$(aws  ssm get-parameter --name "test" --output text --query Parameter.Value)" -t myimage .

使用docker-compose时,您还可以尝试使用系统环境变量。
version: "2.3"
services:
  base:
    build:
      context: .
      args:
        - PYTHON_ENV=developmen
        - API_KEY=${MY_KEY}

在使用docker-compose之前,请将其作为ENV导出。
 export MY_KEY=$(aws  ssm get-parameter --name "test" --output text --query Parameter.Value) && docker-compose build --no-cache

1
这个解决方案比在Docker构建中使用awscli获取ssm参数更好吗?非常好的解释!谢谢! - Igor Eulálio
实际上不是的,这样会在dockerfile中存储敏感信息。 - Tony BenBrahim

1

无法在docker-compose文件中运行脚本/代码。因此,您必须在docker-compose文件之外运行动态API密钥生成脚本。

无论如何,您可以在docker-compose文件中声明一个变量,例如API_KEY_FROM_SSM

version: "2.3"
services:
  base:
    build:
      context: .
      args:
        - PYTHON_ENV=developmen
        - API_KEY=${API_KEY_FROM_SSM}

从 AWS SSM 查询值并在构建镜像时将其分配给 API_KEY_FROM_SSM

API_KEY_FROM_SSM=$(your aws ssm script) docker-compose build

希望能够帮助到您。


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