# whoami [![Docker Pulls](https://img.shields.io/docker/pulls/traefik/whoami.svg)](https://hub.docker.com/r/traefik/whoami/) [![Build Status](https://github.com/traefik/whoami/workflows/Main/badge.svg?branch=master)](https://github.com/traefik/whoami/actions) Tiny Go webserver that prints OS information and HTTP request to output. ## Usage ### Paths #### `/[?wait=d]` Returns the whoami information (request and network information). The optional `wait` query parameter can be provided to tell the server to wait before sending the response. The duration is expected in Go's [`time.Duration`](https://golang.org/pkg/time/#ParseDuration) format (e.g. `/?wait=100ms` to wait 100 milliseconds). The optional `env` query parameter can be set to `true` to add the environment variables to the response. #### `/api` Returns the whoami information (and some extra information) as JSON. The optional `env` query parameter can be set to `true` to add the environment variables to the response. #### `/bench` Always return the same response (`1`). #### `/data?size=n[&unit=u]` Creates a response with a size `n`. The unit of measure, if specified, accepts the following values: `KB`, `MB`, `GB`, `TB` (optional, default: bytes). #### `/echo` WebSocket echo. #### `/health` Heath check. - `GET`, `HEAD`, ...: returns a response with the status code defined by the `POST` - `POST`: changes the status code of the `GET` (`HEAD`, ...) response. ### Flags | Flag | Env var | Description | |-----------|----------------------|-----------------------------------------| | `cert` | | Give me a certificate. | | `key` | | Give me a key. | | `cacert` | | Give me a CA chain, enforces mutual TLS | | `port` | `WHOAMI_PORT_NUMBER` | Give me a port number. (default: `80`) | | `name` | `WHOAMI_NAME` | Give me a name. | | `verbose` | | Enable verbose logging. | ## Examples ```console $ docker run -d -p 8080:80 --name iamfoo traefik/whoami $ curl http://localhost:8080 Hostname: 9c9c93da54b5 IP: 127.0.0.1 IP: ::1 IP: 172.17.0.2 RemoteAddr: 172.17.0.1:41040 GET / HTTP/1.1 Host: localhost:8080 User-Agent: curl/8.5.0 Accept: */* ``` ```console # updates health check status $ curl -X POST -d '500' http://localhost:8080/health # calls the health check $ curl -v http://localhost:8080/health * Host localhost:8080 was resolved. * IPv6: ::1 * IPv4: 127.0.0.1 * Trying [::1]:8080... * Connected to localhost (::1) port 8080 > GET /health HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/8.5.0 > Accept: */* > < HTTP/1.1 500 Internal Server Error < Date: Fri, 18 Apr 2025 13:36:02 GMT < Content-Length: 0 ``` ```console $ openssl req -newkey rsa:4096 \ -x509 \ -sha256 \ -days 3650 \ -nodes \ -out ./certs/example.crt \ -keyout ./certs/example.key $ docker run -d -p 8080:80 -v ./certs:/certs --name iamfoo traefik/whoami --cert /certs/example.crt --key /certs/example.key $ curl https://localhost:8080 -k --cert certs/example.crt --key certs/example.key Hostname: 25bc0df47b95 IP: 127.0.0.1 IP: ::1 IP: 172.17.0.2 RemoteAddr: 172.17.0.1:50278 Certificate[0] Subject: CN=traefik.io,O=TraefikLabs,L=Lyon,ST=France,C=FR GET / HTTP/1.1 Host: localhost:8080 User-Agent: curl/8.5.0 Accept: */* ``` ```console $ docker run -d -p 8080:80 --name iamfoo traefik/whoami $ grpcurl -plaintext -proto grpc.proto localhost:8080 whoami.Whoami/Whoami { "hostname": "5a45e21984b4", "iface": [ "127.0.0.1", "::1", "172.17.0.2" ] } $ grpcurl -plaintext -proto grpc.proto localhost:8080 whoami.Whoami/Bench { "data": 1 } ``` ```yml version: '3.9' services: whoami: image: traefik/whoami command: # It tells whoami to start listening on 2001 instead of 80 - --port=2001 - --name=iamfoo ```