Files
traefik-whoami/README.md
2025-05-22 15:24:04 +02:00

150 lines
3.9 KiB
Markdown

# 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
```