我一直在尝试将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>
}

08-28 07:12