我正在创建一个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
答案 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,并在构建期间运行subshell以获取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