Ein abgespeckter Docker-Container ohne curl und ohne wget, und trotzdem soll ein Health-Check eine HTTP-Anfrage absetzen. Der Entwickler Marek Šuppa hat dafür kein Werkzeug nachinstalliert, sondern die Bordmittel der Shell genutzt: Bash kann selbst eine TCP-Verbindung öffnen.
drweb.de als bevorzugte Quelle auf Google hinzufügenQualitätsgeprüfte Inhalte direkt in Google News & DiscoverJetzt hinzufügenDer Kniff ist alt, aber gerade in schlanken Container-Umgebungen praktisch. Mit dem speziellen Pfad /dev/tcp spricht Bash HTTP von Hand, ganz ohne externes Programm.
Das Wichtigste in Kürze
- Bash öffnet über den speziellen Pfad
/dev/tcp/host/portdirekt einen TCP-Socket, ohne dass curl oder wget installiert sein müssen. - Mit einem Dateideskriptor und einem handgeschriebenen HTTP-Request lässt sich so ein einfacher GET-Aufruf absetzen.
- Der Trick eignet sich für Health-Checks in stark reduzierten Container-Images, in denen kein Netzwerk-Tool vorhanden ist.
- Wichtige Grenze:
/dev/tcpbeherrscht kein TLS und gehört nicht in unbeaufsichtigten Produktivbetrieb.
Wie spricht Bash HTTP ganz ohne curl?

Der Ausgangspunkt war ein schlankes Image, das nur einen einzigen Health-Check-Prozess ausführen sollte. Ein zusätzliches curl in einem Sidecar-Container hätte die Sache unnötig aufgebläht. Šuppa wollte den Aufruf mit dem erledigen, was ohnehin da ist.
Bash behandelt bestimmte Dateinamen in Umleitungen speziell. Der Pfad /dev/tcp/host/port ist keine echte Datei, sondern eine eingebaute Funktion: Wenn der Host auflösbar und der Port gültig ist, öffnet die Shell den passenden TCP-Socket. Genau das macht den Aufruf ohne Zusatzprogramm möglich.
Wie sieht der konkrete Aufruf aus?
Der Ablauf braucht nur drei Bausteine. Zuerst öffnet ein Dateideskriptor die Verbindung mit exec 3<>/dev/tcp/service/8642. Danach schreibt ein printf den HTTP-Request samt Host-Header und Connection: close in diesen Deskriptor. Zuletzt liest cat <&3 die Antwort des Servers aus.
Der Hostname muss dabei auflösbar und erreichbar sein, etwa ein Service-Name in einem konfigurierten Docker-Netzwerk oder ein gültiger DNS-Eintrag. Für einen schlichten GET gegen einen internen Dienst reicht das vollständig, ohne dass eine einzige Zeile Software hinzukommt.
Manchmal ist die eleganteste Lösung die, die nichts hinzufügt. Wer ein 200-Megabyte-Tool installiert, um einen Health-Check zu fahren, hat die Frage falsch gestellt. Bordmittel zuerst, das spart Angriffsfläche und Wartung.
— Markus Seyfferth, Chefredakteur Dr. Web
Wo liegt die Grenze des Tricks?

Der Komfort hat klare Grenzen. /dev/tcp kann kein TLS, eine HTTPS-Verbindung lässt sich damit nicht direkt aufbauen. Für verschlüsselte Aufrufe braucht es weiterhin ein Werkzeug wie openssl. Auch bei einer 301-Weiterleitung versagt der schlichte Ansatz.
Für Debugging, Testen und einfache interne Checks ist die Methode trotzdem ein verlässliches Bordmittel. Für unbeaufsichtigte Pipelines im Produktivbetrieb rät selbst die Entwickler-Community zur Vorsicht und greift dann wieder zu curl. Wer seine Entwicklungsumgebung sauber aufstellen will, findet Anregungen in unseren Tipps zu Windows 11 für Webentwickler und im Editoren-Vergleich 2026.
Mehr Newshunger?
