【问题标题】:How to make external file available before the container starts running in AWS ECS fargate cluster如何在容器开始在 AWS ECS fargate 集群中运行之前使外部文件可用
【发布时间】:2022-02-06 03:41:03
【问题描述】:

我对 docker 很陌生,我有一个 docker 文件,其中包含构建 docker 映像的所有说明。该映像必须部署在 AWS Fargate 集群中。现在我有一个执行以下操作的 python 脚本:

1. clone a repo from GitHub
2. Locate the docker file, build the image and push the docker image to AWS ecr
3. Create a task definition and deploy into ECS fargate cluster
4. Additionally the script generate a YAML file based on certain logic that has certain parameters(not related to container config) which is required for the application

如何在容器开始在 AWS 中运行之前使该文件内容可供容器使用? 我正在检查--entrypoint 和--cmd,但在这里我无法更改Dockerfile

【问题讨论】:

  • 您试图“在容器开始运行之前使其可用”的具体文件是什么? YAML 文件?真的不清楚你在问什么。
  • @MarkB 该文件包含一些从脚本动态生成的信息,并且 yaml 文件必须在运行时可用。我认为在 Fargate 服务中部署时,该文件必须存在于容器中。有什么方法可以在不更改 Dockerfile 的情况下实现这一目标?
  • @Daniel Farrell 我说错了。正确的! Fargate 正在使用任务定义从 ecr 中提取图像。基本上动态生成的文件需要在运行时可用。
  • 听起来您需要更改 Dockerfile 以将 YAML 文件包含在容器中。否则,您需要将文件放在 S3 之类的地方,并让您的应用程序在启动时从那里拉取它。您可以使用 EFS 进行路径映射,但每次文件更改时都很难将文件放到 EFS 上。

标签: docker amazon-ecs


【解决方案1】:

有什么方法可以在不更改 Dockerfile 的情况下实现这一点?

您无法在没有 Dockerfile 的情况下将图层添加到 Docker 映像。但是您可以在原始图像之上构建一个 图像,COPYing 文件并保留ENTRYPOINT CMD 和其他配置原样。

  1. 从上游 Dockerfile 构建“中间”镜像,给它一个标签,你可以稍后参考:

    docker build -t my-intermediate-image:my-version-tag .
    
  2. 创建你的 yaml 文件到myfile.yml

  3. 创建一个新的Dockerfile.final,以FROM 为中间:

    FROM my-intermediate-iamge:my-version-tag
    COPY myfile.yml /expected/yaml/path
    
  4. 使用 ECS 的标签构建最终镜像:

    docker build -f Dockerfile.final -t accountnumber.ecs.amazonaws.com:my-version .
    
  5. 将最终的图片标签推送到ECS

  6. 继续更新 ECS 任务定义以指向新映像

【讨论】:

  • 如果我必须在创建基本映像后复制文件,我不能从脚本和条目COPY myfile.yml /expected/yaml/path 编辑 Dockerfile 然后构建吗?那样我不需要创建任何中间图像。我正确吗?
  • 另一个问题是如果我必须更改 docker 文件,我如何使用--entrypoint 标志来做同样的事情?
  • 如果您愿意,您可以尝试编辑现有的 dockerfile。 --entrypoint不能在容器启动前直接修改镜像内容。您可以指定一个入口点,该入口点使用现有图像上的某些东西在容器启动时从可访问的源中提取 yaml,但这比将其放入图像中要复杂得多,并且不满足“在容器启动之前”的要求
猜你喜欢
  • 2019-01-05
  • 1970-01-01
  • 2022-01-15
  • 2018-07-08
  • 2021-09-07
  • 1970-01-01
  • 2021-01-23
  • 2019-07-15
  • 1970-01-01
相关资源
最近更新 更多