🐛 tunnel diag: Docker log collection deadlocks when the container's stderr log exceeds 64 KiB
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 76/100
Línea de trabajo
Empieza con diagnostic/log_collector_utils.go e inspecciona PipeCommandOutputToFile. Después, comprueba cómo lo usan los recolectores de host y Kubernetes en log_collector_host.go y log_collector_kubernetes.go. Reproduce el problema con logs de Docker que superen los 65.536 bytes en stderr y verifica que se recopilen ambos flujos sin que se agote el tiempo de espera; confirma después que los trabajos de diagnóstico compartidos terminan.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Version: cloudflared 2026.9.3 (the same code is on master today), cloudflared tunnel diag --metrics localhost:<port> --diag-container-id <container>, Linux.
What happens: "log information" fails with error waiting from command 'docker logs --tail 10000 --since <t> <container>': signal: killed after 45 s. Because every job shares the one 45 s context in RunDiagnostic, the jobs after it (raw network information, network information, cli configuration, configuration) also fail with context deadline exceeded.
Cause: diagnostic/log_collector_utils.go, PipeCommandOutputToFile, opens both StdoutPipe and StderrPipe, then io.Copys stdout to EOF before it starts reading stderr. cloudflared writes its log to stderr, so docker logs replays it on stderr. Once more than the pipe buffer (64 KiB on Linux) is pending on stderr, docker logs blocks writing stderr, never closes stdout, and the stdout copy waits until the context kills the process.
Reproduce: run diag against any Docker connector whose docker logs <container> 2>&1 >/dev/null | wc -c is above 65,536. Ours: 160,835 bytes on stderr, 0 on stdout → deadlock every time; another connector with 9,222 bytes → succeeds.
Workaround we used: a docker wrapper earlier in PATH: exec /path/to/real/docker "$@" 2>&1.
Suggested fix: read both pipes concurrently, or set command.Stdout and command.Stderr to the same *os.File (exec then copies both without a reader race), e.g. command.Stdout = outputHandle; command.Stderr = outputHandle; err := command.Run(). The same function serves the host and Kubernetes collectors (log_collector_host.go, log_collector_kubernetes.go), so kubectl logs would deadlock the same way.
- Lenguaje dominante
- Go
- Estrellas
- 16.3k
- Forks
- 1.5k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de cloudflare/cloudflared
-
🐛 HTTP/2 tunnel concurrency silently falls to 250 streams with Go 1.27Posiblemente ocupada @amlaban65 la tomó hace 3 días. AbiertoPriority: Normal Type: Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
cloudflare/cloudflared#1777 · 1 comentario · 5 reacciones ·
Los mantenedores suelen responder en 1 día
-
🐛 --output json writes invalid JSON lines when events are logged concurrentlyPosiblemente ocupada @theolujay la tomó hace 19 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
cloudflare/cloudflared#1761 · 5 comentarios ·
Los mantenedores suelen responder en 1 día
-
🐛 cfRay is missing from proxied request logs (newHTTPLogger discards the zerolog context)Posiblemente ocupada @pankajc46 la tomó hace 22 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
cloudflare/cloudflared#1756 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
🐛 After SIGTERM, `cloudflared tunnel run` uses 100% of one CPU core for the whole graceful-shutdown periodPosiblemente ocupada @cyphercodes la tomó hace 22 días. AbiertoPriority: Normal Type: Bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
cloudflare/cloudflared#1753 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
tunnel route ip show: --filter-network-is-subset-of sends the superset filterPosiblemente ocupada @wangyusheng1985 la tomó hace 22 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 92/100
cloudflare/cloudflared#1750 ·
Los mantenedores suelen responder en 1 día
Todos los issues de cloudflare/cloudflared
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
cloudevents/sdk-go#1346 ·
-
needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
kubernetes/cloud-provider-aws#1517 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
agent-butler-finding chore
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
jordansmall/spindrift#6221 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 3 días