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

时间:2019-09-11 01:29:31

标签: docker docker-compose

我正在创建一个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

2 个答案:

答案 0 :(得分:0)

无法在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

希望,它会有所帮助。

答案 1 :(得分:0)

没有简单的方法可以从子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,并在构建期间运行subshel​​l以获取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