【问题标题】:How to use environment variables for a docker image in AWS-ECR?如何在 AWS-ECR 中为 docker 映像使用环境变量?
【发布时间】:2020-07-29 11:38:10
【问题描述】:

我从 Spring-Boot-App 制作了一个 docker 映像,其中包含 application.properties 。例如,一个属性是user.name=xxx。现在我将图像上传到 AWS-ECR 存储库。有没有办法通过 ECS-Task 或其他方式注入这个变量?对于部署,我使用 Terraform。

【问题讨论】:

标签: amazon-web-services spring-boot docker terraform amazon-ecs


【解决方案1】:

Spring Boot 允许您通过大量不同的方式set configuration

Spring Boot 使用一个非常特殊的 PropertySource 顺序,即 旨在允许明智地覆盖值。属性是 按以下顺序考虑:

  1. 您的主目录上的 Devtools 全局设置属性(当 devtools 处于活动状态时为 ~/.spring-boot-devtools.properties)。
  2. 您的测试中的@TestPropertySource 注释。
  3. @SpringBootTest#properties 注释属性添加到您的测试中。
  4. 命令行参数。
  5. 来自 SPRING_APPLICATION_JSON 的属性(嵌入在环境变量或系统属性中的内联 JSON)
  6. ServletConfig 初始化参数。
  7. ServletContext 初始化参数。
  8. 来自 java:comp/env 的 JNDI 属性。
  9. Java 系统属性 (System.getProperties())。
  10. 操作系统环境变量。
  11. 仅具有随机属性的 RandomValuePropertySource。*。
  12. 打包 jar 之外的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)
  13. 打包在您的 jar 中的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)
  14. 打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。
  15. 应用程序属性打包在您的 jar 中(application.properties 和 YAML 变体)。
  16. @Configuration 类上的@PropertySource 注释。
  17. 默认属性(使用 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 上配置容器时直接添加环境变量的名称/值对
猜你喜欢
  • 2022-11-03
  • 2019-06-04
  • 2018-06-17
  • 2018-03-25
  • 2020-06-10
  • 1970-01-01
  • 2019-07-18
  • 2021-12-12
  • 1970-01-01
相关资源
最近更新 更多