在 AWS ECS 中运行 docker 并传递 env 文件

El *_*eno 2 amazon-web-services amazon-ecs docker amazon-ecr

我需要在 AWS ECS 中运行一个 docker 容器。我无权访问图像的源代码。这是一个私有映像,来自我上传到 AWS ECR 的私有存储库。我创建了一个 AWS ECS 任务定义来在集群内的服务内运行容器。该图像显示为已启动并正在运行,但我无法通过浏览器点击它。我知道所有网络设置都是正确的,因为我可以点击一个hello world我也部署进行测试的简单应用程序。

我之前还需要运行一个命令:docker run --env-file <environment_variables_file> <image>:<tag> rake db:reset && rake db:seed.

根据这个 docker 镜像的说明,它的运行命令是:docker run -d --name <my_image_name> --env-file <environment_variables_file> -p 8080:80 <image>:<tag>.

我可以在我的笔记本电脑上本地运行这个映像,没有问题,将它部署到 AWS 就是这个问题。我的问题是如何提供environment_variables_file图像?我在哪里上传文件以及如何传递它?如何在映像运行之前运行命令来初始化数据库?

Mar*_*ine 6

自 2020 年 11 月起,ECS 确实支持 env 文件(博客文章),但它们必须托管在 S3 上:

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/taskdef-envfiles.html


贴上要点以供参考。在容器定义下:

"environmentFiles": [
  {
    "value": "arn:aws:s3:::s3_bucket_name/envfile_object_name.env",
    "type": "s3"
  }
]
Run Code Online (Sandbox Code Playgroud)

任务执行角色还需要以下权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::s3_bucket_name/envfile_object_name.env"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::s3_bucket_name"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)


小智 1

Amazon ECS 不支持环境变量文件。您可以在任务定义中设置环境变量。例如:

"environment" : [
    { "name" : "string", "value" : "string" },
    { "name" : "string", "value" : "string" }
]
Run Code Online (Sandbox Code Playgroud)

请阅读以下说明以了​​解更多详细信息。

更新:

AWS现在提供了一种方法 -

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/taskdef-envfiles.html