我一直在尝试将ECS上的应用程序容器化。我正在使用terraform构建相同的基础结构。
现在,我想将主机目录挂载到容器中。在普通docker上,我将通过使用docker run -v <host_path>:<path_inside_container>
进行操作。但是我找不到相同的地形形式。
我已经尝试了volume
中的aws_ecs_task_definition
指令,但是无法从主机目录读取/写入主机目录。
resource "aws_ecs_task_definition" "my-application"{
family = <application_family_name>
task_role_arn = "${aws_iam_role.ecsTaskRole.arn}"
network_mode = "host"
volume {
name = <application_files>
host_path = "/home/my_app_dir/"
}
container_definitions = <container_definitions>
}
提前致谢。
最佳答案
您需要做的是,在资源aws_ecs_task_definition
中定义卷之后,在任务定义中添加一个映射。
@Amal通过在任务定义中添加mountPoints
来回答问题。 任务定义中的sourceVolume
必须与资源的volume
中的名称相同。
我需要在这里提及的是
@amal的卷代码部分是从Cloudformation模板复制的,但不能在terraform中使用。目前在资源aws_ecs_task_definition
中没有列表支持 map 。您现有的卷码很好。
如果需要添加更多卷,请使用这种方式
resource "aws_ecs_task_definition" "my-application"{
family = <application_family_name>
task_role_arn = "${aws_iam_role.ecsTaskRole.arn}"
network_mode = "host"
volume {
name = <application_files>
host_path = "/home/my_app_dir/"
}
volume {
name = <application_files_2>
host_path = "/home/my_app_dir-2/"
}
container_definitions = <container_definitions>
}