【发布时间】:2022-11-02 00:48:56
【问题描述】:
我需要在 aws_ecs_task_definition 中运行 docker cmd 我可以直接在本地机器 docker 中运行它,但无法在 task_definition 上运行它
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
我试图从命令里面容器定义但无法运行
已编辑
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
}
}
【问题讨论】:
-
抱歉,什么是“在 aws_ecs_task_definition 中运行命令”?您的意思是对 ECS 任务中正在运行的容器执行 exec 吗?
-
您实际上是在要求某人给您代码。首先,阅读文档。有很多关于如何做到这一点的例子。然后,如果您遇到无法解决的错误,请转向 SO。
-
是的,在 aws_ecs_task_definition 里面我有 container_definition 我试图通过这个,aws_ecs_task_definition 被 aws_ecs_service 使用
-
@MarkoE 在文档中说写在我已经尝试过的 commad 属性中,使用它给我 503 错误,我需要与数据库连接的数据的持久性,否则它对我有用
-
您只显示了 Docker 命令,没有 terraform 代码。因此,如果没有它,几乎不可能说出可能出了什么问题。
标签: amazon-web-services terraform amazon-ecs ecs-taskdefinition n8n