如何在 AWS-ECR 中为 docker 映像使用环境变量?
Posted
技术标签:
【中文标题】如何在 AWS-ECR 中为 docker 映像使用环境变量?【英文标题】:How to use environment variables for a docker image in AWS-ECR? 【发布时间】:2020-07-29 11:38:10 【问题描述】:我从 Spring-Boot-App 制作了一个 docker 映像,其中包含 application.properties
。例如,一个属性是user.name=xxx
。现在我将图像上传到 AWS-ECR 存储库。有没有办法通过 ECS-Task 或其他方式注入这个变量?对于部署,我使用 Terraform。
【问题讨论】:
您可以将环境变量传递给任务定义。这是 Cloudformation 文档。 docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/…。你应该也可以通过 terraform 来做同样的事情。 【参考方案1】:Spring Boot 允许您通过大量不同的方式set configuration:
Spring Boot 使用一个非常特殊的 PropertySource 顺序,即 旨在允许明智地覆盖值。属性是 按以下顺序考虑:
您的主目录上的 Devtools 全局设置属性(当 devtools 处于活动状态时为 ~/.spring-boot-devtools.properties)。 您的测试中的@TestPropertySource 注释。 @SpringBootTest#properties 注释属性添加到您的测试中。 命令行参数。 来自 SPRING_APPLICATION_JSON 的属性(嵌入在环境变量或系统属性中的内联 JSON) ServletConfig 初始化参数。 ServletContext 初始化参数。 来自 java:comp/env 的 JNDI 属性。 Java 系统属性 (System.getProperties())。 操作系统环境变量。 仅具有随机属性的 RandomValuePropertySource。*。 打包 jar 之外的特定于配置文件的应用程序属性(application-profile.properties 和 YAML 变体) 打包在您的 jar 中的特定于配置文件的应用程序属性(application-profile.properties 和 YAML 变体) 打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。 应用程序属性打包在您的 jar 中(application.properties 和 YAML 变体)。 @Configuration 类上的@PropertySource 注释。 默认属性(使用 SpringApplication.setDefaultProperties 指定)。
最简单的方法是设置environment variables for the ECS container definition,以便它们在运行时注入到任务中。由于它们的顺序,这也将覆盖application.properties
中设置的任何属性。
Terraform 中任务定义的一个非常基本的示例如下所示:
resource "aws_ecs_task_definition" "example"
family = "example"
container_definitions = <<TASK_DEFINITION
[
"cpu": 10,
"command": ["sleep", "10"],
"entryPoint": ["/"],
"environment": [
"name": "USER_NAME"
"value": "xxx"
],
"essential": true,
"image": "example",
"memory": 128,
"name": "example",
"portMappings": [
"containerPort": 80,
"hostPort": 8080
]
]
TASK_DEFINITION
【讨论】:
为了做到这一点,我必须将它们调用到 dockerfile 中? 不。相当于运行docker run -e USER_NAME=xxx example:latest
2021,现在有一个选项可以在 ecs 上配置容器时直接添加环境变量的名称/值对以上是关于如何在 AWS-ECR 中为 docker 映像使用环境变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何在具有纱线工作空间的 monorepo 中从 nodejs 项目构建 docker 映像
如何在 Redhat-SSO 映像中为 OpenShift 启用相互 SSL 验证模式