ECS部署fluentd日志容器遇CannotCreateContainerError:地址冒号过多
解决ECS任务定义中fluentd-address的格式错误问题
我刚帮你定位到问题的根源了——你在fluentd-address里加了https://前缀,这就是导致报错的核心原因!
Docker的fluentd日志驱动对fluentd-address参数的格式要求很严格,它只接受host:port的纯网络地址格式,不需要任何协议前缀。你现在写的https://fluentd-url:9090里有三个冒号(https://里两个,端口处一个),Docker解析这个地址时就会抛出“too many colons in address”的错误。
解决方案
直接去掉https://前缀,把地址改成纯host:port格式。如果你的fluentd服务需要通过TLS加密传输,不用在地址里加前缀,而是添加fluentd-secure: "true"选项来启用TLS即可。
修改后的任务定义片段如下:
resource "aws_ecs_task_definition" "ecs_tooling_task_definition" { family = "${var.environment}-ecs_tooling_task_definition" container_definitions = <<DEFINITION [ { "name": "tooling", "image": "myimage.dkr.ecr.eu-west-1.amazonaws.com/tooling:latest", "essential": true, "memory": 512, "cpu": 10, "portMappings": [ { "containerPort": 24224, "hostPort": 24224 } ], "logConfiguration": { "logDriver": "fluentd", "options": { "fluentd-address":"fluentd-url:9090", "fluentd-secure": "true" # 如果需要TLS加密就保留这行 } } } ] DEFINITION }
额外说明
如果你的fluentd服务是通过HTTP协议接收日志(比如配置了fluent-plugin-http插件),那Docker原生的fluentd日志驱动并不支持HTTP传输,这种情况下你需要改用http日志驱动,或者调整fluentd配置启用TCP监听端口(这是fluentd的默认配置)。
内容的提问来源于stack exchange,提问作者Josh Laird
相关产品推荐
相关产品推荐

