将 EBS 卷挂载到 ECS 任务
Mount an EBS volume to ECS Task
使用 AWS CDK 我创建了一个 ASG + ECS 集群和一个外部 EBS 卷。
df -h
/dev/nvme0n1p1 30G 9.6G 21G 32% /
/dev/nvme1n1 200G 237M 200G 1% /mnt
注意:驱动器由 UserData 格式化和装载,因此在任何容器启动之前应该准备好。
我的容器使用 ENTRYPOINT 启动,
ENTRYPOINT ["/usr/bin/sh", "/opt/startup.sh"]
容器使用 startup.sh
启动正常,但现在我想将 /mnt
目录从主机挂载到容器中,我该怎么做?
在同一台服务器上,如果我 运行 docker run -p 80:80 -v /mnt:/opt httpd
/mnt
目录安装正常,所以我需要一种方法来控制 ECS 任务。
完成此操作的最佳方法是使用 docker 卷插件,这是完成此操作的 CDK 代码。
我觉得这篇文章很有帮助
https://aws.amazon.com/blogs/compute/amazon-ecs-and-docker-volume-drivers-amazon-ebs/
const EBSVolumeName = 'data-volume'
cluster.addAsgCapacityProvider(capacityProvider)
const taskDefinition = new ecs.Ec2TaskDefinition(this, 'TaskDef', {
volumes:[{ //https://aws.amazon.com/blogs/compute/amazon-ecs-and-docker-volume-drivers-amazon-ebs/
name: EBSVolumeName,
dockerVolumeConfiguration:{
autoprovision:true,
scope: ecs.Scope.SHARED, //a shared volume is for use cases where the volume lifecycle is independent of the ECS task.
driver: 'rexray/ebs',
driverOpts:{
volumetype: 'gp3',
size:'200',
}
}
}]
});
const appTask = taskDefinition.addContainer('DefaultContainer', {//define the container})
appTask.addMountPoints({sourceVolume:EBSVolumeName, containerPath: '/mnt', readOnly: false})
使用 AWS CDK 我创建了一个 ASG + ECS 集群和一个外部 EBS 卷。
df -h
/dev/nvme0n1p1 30G 9.6G 21G 32% /
/dev/nvme1n1 200G 237M 200G 1% /mnt
注意:驱动器由 UserData 格式化和装载,因此在任何容器启动之前应该准备好。
我的容器使用 ENTRYPOINT 启动,
ENTRYPOINT ["/usr/bin/sh", "/opt/startup.sh"]
容器使用 startup.sh
启动正常,但现在我想将 /mnt
目录从主机挂载到容器中,我该怎么做?
在同一台服务器上,如果我 运行 docker run -p 80:80 -v /mnt:/opt httpd
/mnt
目录安装正常,所以我需要一种方法来控制 ECS 任务。
完成此操作的最佳方法是使用 docker 卷插件,这是完成此操作的 CDK 代码。
我觉得这篇文章很有帮助
https://aws.amazon.com/blogs/compute/amazon-ecs-and-docker-volume-drivers-amazon-ebs/
const EBSVolumeName = 'data-volume'
cluster.addAsgCapacityProvider(capacityProvider)
const taskDefinition = new ecs.Ec2TaskDefinition(this, 'TaskDef', {
volumes:[{ //https://aws.amazon.com/blogs/compute/amazon-ecs-and-docker-volume-drivers-amazon-ebs/
name: EBSVolumeName,
dockerVolumeConfiguration:{
autoprovision:true,
scope: ecs.Scope.SHARED, //a shared volume is for use cases where the volume lifecycle is independent of the ECS task.
driver: 'rexray/ebs',
driverOpts:{
volumetype: 'gp3',
size:'200',
}
}
}]
});
const appTask = taskDefinition.addContainer('DefaultContainer', {//define the container})
appTask.addMountPoints({sourceVolume:EBSVolumeName, containerPath: '/mnt', readOnly: false})