error ClientException:在fargate地形中networkMode=awsvpc时,不支持链接



我在地形中遇到错误:

ClientException: Links are not supported when networkMode=awsvpc.

我将nginx与我的nodejs应用程序链接起来。我希望nodejs在3000端口上运行,而nginx在80端口上运行。当请求传入时,nginx将代理nodejs。(我已经将nginx.conf和proxy定义为3000(。

它发生在远门模式下。但我在这里没有选择,网络模式只是awsvpc

我能做什么?有办法把容器连接起来吗?里面有一个conatiner、nginx和nodejs?只是nodejs?其他解决方案?

这里是我的地形设置:

resource "aws_ecs_service" "nginx" {
name            = "nginx-${var.app}"
cluster         = aws_ecs_cluster.demo.id
task_definition = aws_ecs_task_definition.nginx.arn
desired_count   = 4
launch_type = "FARGATE"
lifecycle {
ignore_changes = [task_definition]
}
...
}
resource "aws_ecs_task_definition" "nginx" {
family = "nginx-${var.app}"
container_definitions = file("container_definitions.json")
requires_compatibilities = ["FARGATE"]
network_mode = "awsvpc"
}

container_definitions.json:

[
{
"name": "nginx-...nginx-www",
"image": "311443.dkr.ecr.us-east-2.amazonaws.com/...-nginx:latest",
"cpu": 256,
"memory": 256,
"essential": true,
"links": ["www-app"],
"portMappings": [
{
"protocol": "tcp",
"containerPort": 80
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "...",
"awslogs-region": "us-east-2",
"awslogs-stream-prefix": "ecs"
}
}
},
{
"name": "www-app",
"image": "93934.dkr.ecr.us-east-2.amazonaws.com/..../www-app:latest",
"cpu": 256,
"memory": 256,
"essential": true,
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs-..../nginx",
"awslogs-region": "us-east-2",
"awslogs-stream-prefix": "ecs"
}
}
}
]

TL;博士

我建议您将位于s3的配置文件链接到ecs-nginx。


ecs容器之间,彼此链接在同一网络上。如果您使用fargates,AWS会强制执行网络模式。

有两种解决方案。

  1. 为容器nginx镜像配置nginx配置

只需将web端口80转发到3000节点端口。Nginx主要是针对这个主题设计的。

上传nginx.config文件到s3,然后用";EnvironmentFile;领域

或者,您可以使用自定义配置构建自己的nginx映像(不推荐(。

  1. 放弃使用nginx。Web端口可以与应用程序负载均衡器一起转发

您可以在应用程序负载均衡器上从80转发到3000。这取决于您的应用程序大小。如果这是一个简单的应用程序,你不必使用nginx。

通常,Nginx被用作反向代理,但可以用于控制http缓冲(代理缓冲(、优雅的重新启动、排队请求等

最新更新