ipmideck command, and the Docker
container, which runs the web server directly. They behave differently — the host
command gives you an interactive operator console, while the container just streams plain
logs. This page covers both.
Host install: ipmideck start
On a host install (pip), the server is started with the ipmideck command. The primary
command is start:
ipmideck with no subcommand serves identically to ipmideck start:
0.0.0.0:3000, so open http://<your-ip>:3000 in a
browser once it is up.
ipmilink is a backward-compatible alias for the same command — ipmilink start
behaves exactly like ipmideck start. Use ipmideck for everything new.ipmideck start opens an interactive operator console. When
the same command runs without a terminal — for example piped to a file or under a
process supervisor — it skips the console and serves with plain logs instead. See
the headless / non-TTY mode below.
Docker: the container runs the server directly
The Docker container does not run theipmideck command. Its image launches the web
server (uvicorn) directly:
ipmideck CLI, none of the subcommands, flags, or
the interactive console apply inside Docker — the container only ever streams plain
logs to stdout, exactly like the headless host mode. The container binds to
0.0.0.0:3000 and --network host is required so it can reach your BMCs over UDP port
623. See Installation for the networking details.
Configure the container with
IPMIDECK_-prefixed environment variables and a volume on
/data rather than CLI flags — see Configuration. The published image
is coming soon; the command above is the exact command you will run once it is live.The data directory
ipmideck writesconfig.yaml, the SQLite database, and the credential encryption key into
a single data directory. Where that lives depends on the platform:
- Linux / Docker:
/data - Windows:
./data(relative to the directory you runipmideckfrom)
IPMIDECK_DATA_DIR environment
variable:
IPMIDECK_DATA_DIR=/data, so persist that path with a
volume to keep your config and history across container restarts.
Environment overrides
EveryIPMIDECK_-prefixed environment variable that overrides a config.yaml setting
works the same way whether you run on the host or in Docker — see
Configuration for the full list. The two that change how ipmideck
binds are:
| Environment variable | Effect |
|---|---|
IPMIDECK_SERVER_HOST | Bind host (default 0.0.0.0). |
IPMIDECK_SERVER_PORT | Bind port (default 3000). |
Environment variables take precedence over
config.yaml. On a host install, an explicit
command-line bind flag wins over both the environment variable and the file.Port already in use
If something is already listening on the bind port, ipmideck refuses to start rather than fight another instance for the port. It prints this to stderr and exits with status1:
IPMIDECK_SERVER_PORT
(or server.port in config.yaml), and start again.
Address unavailable
A different failure is when the host you asked to bind cannot be used — for example an address that does not exist on this machine, an IPv6-only interface, or a privileged port you are not permitted to bind. ipmideck reports this separately and also exits with status1:
IPMIDECK_SERVER_HOST (or server.host) — it must be an address that
actually exists on the machine — and make sure the port is one you are allowed to bind.
Graceful shutdown with Ctrl+C
Press Ctrl+C (which sendsSIGINT; SIGTERM is handled the same way) to stop
ipmideck. The shutdown is graceful: the web server exits its loop, the application
lifespan shutdown runs — fan control is handed back to your BMCs — and the process
exits cleanly with no traceback.
In Docker, the container stops on SIGTERM (what docker stop sends), so the same
graceful shutdown runs when you stop the container.
Restarting
How a restart works depends on your operating system:- Linux (and other POSIX systems): ipmideck restarts in place — it re-launches a
fresh process that re-reads
config.yaml, keeping the same controlling terminal. - Windows: there is no in-place re-exec. ipmideck shuts down cleanly and prints a hint asking you to run the command again yourself:
ipmideck start in the same shell — the fresh process re-reads
config.yaml and picks up the new settings.
Headless / non-TTY mode
When ipmideck runs without an attached terminal — piped to a file, redirected, or under a process manager — it detects there is no TTY and skips the interactive console. It serves the dashboard normally and streams plain logs to stdout instead. This is the same output you get from the Docker container, which always runs without a console. This mode needs nothing special: just start ipmideck the way your supervisor or pipeline invokes it, and read the logs from stdout.Next steps
- Installation — Docker and pip in detail.
- Configuration —
config.yaml, environment overrides, and where data lives. - Troubleshooting — connection and IPMI errors.