如何在 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 验证模式

使用Skaffold构建多体系结构docker映像

在构建时使用 docker-compose 将环境变量传递给 docker 映像

使用 Gitlab docker 映像发送电子邮件

Docker入门系列之四:Docker映像