首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在aws_ecs_task_definition平台aws中运行cmd?

如何在aws_ecs_task_definition平台aws中运行cmd?
EN

Stack Overflow用户
提问于 2022-11-01 16:14:22
回答 1查看 38关注 0票数 -1

我需要在aws_ecs_task_definition中运行docker,我可以在本地机器上直接运行它,但不能在task_defination上运行。

代码语言:javascript
复制
        docker run -it --rm \
    --name n8n \
    -p 5678:5678 \
    -e DB_TYPE=postgresdb \
    -e DB_POSTGRESDB_DATABASE=<POSTGRES_DATABASE> \
    -e DB_POSTGRESDB_HOST=<POSTGRES_HOST> \
    -e DB_POSTGRESDB_PORT=<POSTGRES_PORT> \
    -e DB_POSTGRESDB_USER=<POSTGRES_USER> \
    -e DB_POSTGRESDB_SCHEMA=<POSTGRES_SCHEMA> \
    -e DB_POSTGRESDB_PASSWORD=<POSTGRES_PASSWORD> \
    -v ~/.n8n:/home/node/.n8n \
    n8nio/n8n \
    n8n start

这是我需要运行的cmd,但在本地可以正常工作,但无法从aws_ecs_task_definition运行。

我试图从container_definitions内部的命令运行cmd,但无法运行。

编辑的

代码语言:javascript
复制
resource "aws_ecs_task_definition" "task-definition" {
  family                = "${var.PROJECT_NAME}-task-definition"
  container_definitions = jsonencode([
    {
      name      = "${var.PROJECT_NAME}-task-container"
      image     = "${var.IMAGE_PATH}"
      cpu       = 10
      memory    = 512
      essential = true
      environment = [
        {name: "DB_TYPE", value: "postgresdb"},
        {name: "DB_POSTGRESDB_DATABASE", value: "${var.DB_NAME}"},
        {name: "DB_POSTGRESDB_HOST", value: "${var.DB_NAME}"},
        {name: "DB_POSTGRESDB_DATABASE", value: "${aws_db_instance.rds.address}"},
        {name: "DB_POSTGRESDB_PORT", value: "5432"},
        {name: "DB_POSTGRESDB_USER", value: "${var.DB_USERNAME}"},
        {name: "DB_POSTGRESDB_PASSWORD", value: "${var.DB_PASSWORD}"},
      ]
      
      command   = [
        "docker", "run", 
        "-it", "--rm", 
        "--name", "${var.IMAGE_PATH}",  
        "-v", "~/.n8n:/home/node/.n8n", 
        "n8nio/n8n", 
        "n8n", "start",
        "n8n", "restart"
      ]

      portMappings = [
        {
          containerPort = 5678
          hostPort      = 5678
        }
      ]
    }
  ])

  depends_on = [
    aws_db_instance.rds
  ]
}

resource "aws_ecs_service" "service" {
  name            = "${var.PROJECT_NAME}-ecs-service"
  cluster         = aws_ecs_cluster.ecs-cluster.id
  task_definition = aws_ecs_task_definition.task-definition.arn
  desired_count   = 1
  iam_role        = aws_iam_role.ecs-service-role.arn
  depends_on      = [aws_iam_policy_attachment.ecs-service-attach]

  load_balancer {
    elb_name       = aws_elb.elb.name
    container_name = "${var.PROJECT_NAME}-task-container"
    container_port = 5678
  }

  
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-01 16:48:56

ECS任务定义中的command不接受docker命令。ECS正在启动的是应该在docker容器中运行的命令。ECS是一个码头编组服务。ECS在幕后为您运行docker命令,您永远不会给ECS一个直接的docker命令来运行。

在本地运行的docker命令中,在容器中执行的command部件是n8n start。所以你的command应该是:

代码语言:javascript
复制
     command   = [
        "n8n", "start"
      ]

所有其他的docker命令参数,如容器名称、卷映射、环境变量、图像ID,都是您在ECS任务定义的其他地方拥有的参数。似乎您已经在其他地方的任务定义中指定了所有这些参数,但卷映射除外。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74278755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档