如何在 ECS 中向我的 API 运行 添加持久卷?

How can I add a persistent volume to my API running in ECS?

我试图保留存储在我的静态文件夹中的数据,因为用户可以上传图像并存储在该文件夹中,通常当我使用 docker 时只是使用一个卷安装 /static 文件夹并指向某个主机文件夹,但我似乎没有正确执行此操作。

在我的 ECS 任务定义中,我创建了名为 static 的卷 /static...我 运行 我的服务使用这个任务定义,然后我输入了相应的 docker

docker exec -it <id for my service> bash

我浏览了文件夹,但在任何路径中都找不到任何 /static 文件夹

我忽略了什么?添加文件夹的最简单方法是什么,我可以在我的 ECS 中保存数据

谢谢大家,很抱歉提出这个超级菜鸟的问题

您似乎只将卷添加到 TaskDefinition,而没有在任何 ContainerDefinition 中引用它。如果您将鼠标悬停在屏幕截图中“名称”旁边的信息图标上,信息消息将显示为:

The name of the volume to use in the container definition Mount points as Source volume.

因此,您需要在 ContainerDefinition 的 "mountPoints" 中创建以引用上述挂载,这会将 static 文件夹添加到您的容器中。

例如以下是一个 JSON task-definition 除了坐骑之外的所有内容都被删除的:

{
  "containerDefinitions": [
    {
      "mountPoints": [
        {
          "readOnly": null,
          "containerPath": "/static",
          "sourceVolume": "static"
        }
      ]
    }
  ],
  "volumes": [
    {
      "fsxWindowsFileServerVolumeConfiguration": null,
      "efsVolumeConfiguration": null,
      "name": "static",
      "host": {
        "sourcePath": "/static"
      },
      "dockerVolumeConfiguration": null
    }
  ]
}

从外观上看,您使用的是 EC2 启动类型。使用 EFS 的 ECS 任务会自动挂载客户在任务定义中指定的文件系统,并跨区域所有可用区供任务中的容器使用。这使得可以在 ECS 中的任务和容器级别定义和使用持久共享存储。

{
    "containerDefinitions": [
        {
            "memory": 128,
            "portMappings": [
                {
                    "hostPort": 80,
                    "containerPort": 80,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "mountPoints": [
                {
                    "containerPath": "/usr/share/nginx/html",
                    "sourceVolume": "efs-html"
                }
            ],
            "name": "nginx",
            "image": "nginx"
        }
    ],
    "volumes": [
        {
            "name": "efs-html",
            "efsVolumeConfiguration": {
                "fileSystemId": "fs-1324abcd",
                "transitEncryption": "ENABLED"
            }
        }
    ],
    "family": "efs-tutorial"
}

您也可以将 EFS 连接到多个任务。 [本文档讨论如何实现它][1]

此外,EFS 还与 Fargate 一起工作,后者也负责资源管理。

使用绑定挂载,数据将持久保存在作为 运行 任务的容器实例上。因此,使用 EFS 在这里确实提供了优势。 [1]: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/tutorial-efs-volumes.html