如何在 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
我试图保留存储在我的静态文件夹中的数据,因为用户可以上传图像并存储在该文件夹中,通常当我使用 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