Repository navigation
Releases: blairham/dockmaster
Release list
v0.1.0
Added
- A local registry (#120):
:registry up(oruin:registries) runs
registry:2asdockmaster-registryon127.0.0.1:5000
(localRegistry.name/.port), its images in a named volume that
survives the container, deletes enabled — or starts the kind or k3d
registry already on the daemon instead of a second one.:registries
lists the registry containers first;enteron any registry, local or
one you are logged in to, lists its repositories (:catalog [registry]),
andenteron one its tags with digest, size, platforms and age.ctrl-d
on a tag deletes it by digest andPgarbage-collects the registry
container, both after a confirm.xstops a registry container and
ctrl-dremoves dockmaster's own (its volume stays). In:registries,
logging in again to a row moved fromentertol. Everything but
browsing is refused under--readonly. - Pushing to the local registry (#120):
p's confirm takesLto push to
the local registry instead — the image is tagged
localhost:5000/<name>:<tag>and that is pushed; the build form's "push
local" pushes the built tag there once the build succeeds;uon a tag
in a registry pulls it and opens the run form on it. A push or pull that
finds no registry listening says to:registry up. :builds(also:build-history,:bh) is the build history, as Docker
Desktop's Builds tab (#118): every record the builder keeps (docker buildx history, buildx v0.20.0 or later) — name, status, steps, cache
hits, duration, age and a failed build's error — newest first, with
dockmaster's own running builds on top.enterreplays a build's log
(enteron a running one reopens its output),oinspects it,Ropens
the build form on the same context, Dockerfile, target and args,ctrl-d
removes a record (confirms; works on marked rows),ctrl-zlists failed
builds only. config.yaml'sbuilderpicks the buildx builder.ctrl-nin the volumes and networks views creates one, through a form
(#106): a volume's name, driver, driver opts and labels; a network's name,
driver (overlayoffered only on a swarm manager), subnet, gateway,
internal, attachable and labels.:create volumeand:create network
open the same forms from any view,:createthe one for the view on
screen. Refused under--readonly.- Snapshot and move images and containers (#108):
Mon a container (or
:commit) commits it to an image —repo[:tag], a message, paused while
it is read unless you say otherwise;Eexports a container's filesystem
(:export) or saves an image, or every marked one, to a tar (:save),
by default under~/.local/state/dockmaster/exports/, confirming before
it replaces a file;:load <path>loads images from a tar. Commit and load
are refused under--readonly. Non a container connects it to a network or disconnects it (#107): a
picker lists every network with the ones it is on marked; choosing another
connects it, with optional aliases and a fixed IP, and choosing one it is
on disconnects it after a confirm. With rows marked it acts on all of them.
In a network's used-by list (U),ctrl-ddisconnects the container from
that network (confirms) instead of removing it.--readonlyrefuses both.:build [path]builds an image (#104): a form for tag, Dockerfile, target
and build args, thendocker buildx build— ordocker buildwhere buildx
is not installed — against the daemon on screen, its output streamed into a
log-style view (autoscroll, wrap, copy,ctrl-ssave). A failure leaves the
output on screen;escstops a build still running.bon a Dockerfile or
a directory in:diropens the same form. Refused under--readonly.:registries(:reg) lists the registries in the docker config, where
each credential is stored and whether it resolves, never the secret.
:login [registry](ornthere) checks a username and password with
the daemon and stores them asdocker logindoes, in the credential
helper;ctrl-dlogs out after a confirm. Both are refused under
--readonly.- Alerts: a container turning unhealthy, being OOM-killed, exiting
non-zero or restart-looping is flashed in whatever view is on screen
([web] OOM-killed), written to the log file, and listed by:alerts
for the session, whereenterjumps to the container. A stop, kill or
restart you asked for is not a crash, and each transition is reported
once.alerts.enabled(on),alerts.bellandalerts.restartLoop
(count3 inwindow5m), overridable per context. (#109) - Tag and push images (#102):
ton an image (or:tag <ref>) tags it
repo[:tag];p(or:push [ref]) pushes its tag after a confirm, with
the credential the docker config holds for the registry (:registries),
progress streaming to the flash line. Both are refused under--readonly. - Projects build and show their config (#105):
brunscompose build—
every service or one, picked in a form — streamed into the same output view
as:build, and optionallycompose up -donce it succeeds;yshows
compose config, the merged YAML of every compose file,.envand
interpolation, in the inspect view. A build is refused under--readonly
and when the compose files are not on this machine; the config is allowed
under--readonly. :builders(:buildx) lists the buildx builders (#119): driver, endpoint,
status, BuildKit version and platforms, the current one marked, and why a
broken one is broken.u/xstart and stop one,Umakes it the
default (buildx use),Pprunes its build cache,ctrl-ncreates one
(name, driver, platforms, a remote driver's endpoint) andctrl-dremoves
one (both prune and remove confirm; a docker context's own builder is
refused);enter/oshowbuildx inspect. Changes are refused under
--readonly.
Changed
- Builds run in the background (#121):
escin a build's output leaves it
running and only closes the view;:buildslists it on top, andenter
reopens it with everything it printed meanwhile.xstops a
build (confirms). A project showsbuilding…while its compose build
runs, and "then up" runs when it finishes wherever you are. A build that
ends while its output is closed says so —[app:dev] build finished, or
failed (exit N)— and is written to the log. Quitting with a build
running asks first (:q!does not). - Releases are built and signed by the shared
go-release.ymlin
blairham/.github, whichrelease.ymlnow calls.checksums.txt's
signature and the provenance name that workflow, with this repository and
the tag; SECURITY.md has the new verify commands, and how to check v0.0.16
and earlier. - Built with Go 1.26.9.
Full Changelog: v0.0.16...v0.1.0
v0.0.16
Changed
- The
:palette suggests the shortest command that extends what is
typed, as k9s does:qsuggestsq!andqusuggestsquit, whereq
used to suggest only itself. A command that begins a longer one now
suggests the longer one (logo→logoless); enter still runs what was
typed.
Full Changelog: v0.0.15...v0.0.16
v0.0.15
Added
:delete alldeletes every image in the images view, or every volume in
the volumes view (:delete all images/:delete all volumesfrom
anywhere). Nothing is forced: whatever a container uses, or the daemon
refuses, is skipped and counted. It confirms first, and--readonly
refuses it.
Full Changelog: v0.0.14...v0.0.15
v0.0.14
Fixed
- The confirm dialog's buttons are k9s's colors: the focused one black on
dodgerblue, the other cadetblue, and a skin'sdialog:block recolors
them. - k9s's stock skins load: a skin color that does not parse (the stock
skins namelinegreen) is drawn in the terminal's own color, as k9s
draws it, instead of stopping startup.
Full Changelog: v0.0.13...v0.0.14
v0.0.13
Changed
- Confirmations are k9s's popup dialog instead of a bar above the table:
the question floats over the table, which keeps its rows, and is headed
by the action (<Remove>,<Kill>,<Prune>, …). Focus starts on
Cancel, so enter alone now declines — pressy, or tab / → to OK and
enter, to go ahead.nand esc still decline.
Full Changelog: v0.0.12...v0.0.13
v0.0.12
Added
-
Plugins can live one or more to a file in
plugins/beside
plugins.yaml, k9s's snippet directory: every*.yamlthere is merged
withplugins.yamland checked with it, and a name defined in two files
is an error naming both.ui.reactivereloads a change inside it. (#64) -
jumps.yaml, k9s's custom jumps:enterin a view opens another view
filtered by the selected row —labelSelector: com.docker.compose.project=$PROJECT
on containers opens that project's volumes. Values are filled in once and
matched as text; a variable the view's rows do not give is refused at
startup. (#64) -
:xray net,:xray voland:xray imgroot the xray tree at networks,
volumes or images, as k9s's:xray <resource>; container nodes keep every
container key. (#64) -
The header's
CPU/MEMline: the daemon host's CPU and memory in use, from
the CPU/MEM poll's samples and the host's size — no extra daemon call —
colored bythresholds, andn/awith the poll off. (#64) -
Container labels that preset or skip the
shift-fport-forward prompt,
k9s's FastForwards annotations:dockmaster.port-forwards=8080:80
prefills the prompt anddockmaster.auto-port-forwards=8080:80replaces
it with a yes/no confirm. The value is what the prompt takes, optionally
after a k9s-styleservice::. A label that does not parse is reported in
the prompt, and no label starts a forward without a yes (#64). -
The
shift-fprompt takes several forwards, comma-separated
(8080:80,8443:443). -
fon a container opens:pfnarrowed to that container's forwards,
as k9s'sf(#64). -
portForwardAddressinconfig.yaml(k9s's): the address a forward
listens on, an IP orlocalhost, default127.0.0.1. When it is not
loopback theshift-fprompt and confirm warn that the forward is
reachable from the network, and:pfshows the address (#64). -
ctrl-aopens k9s's aliases view (#64): every:command with its other
spellings, and youraliases.yamlentries, markedalias, as a table you
can filter and sort;enterruns the selected one as if typed at the
palette.:aliasesopens the same view (it was a plain-text list of your
aliases). In the:and/barsctrl-ais still start of line. -
ctrl-din the contexts view runsdocker context rm <name>after a
confirm (#64).default, the context dockmaster is connected through and
the docker CLI's current context are refused with the reason;--readonly
refuses it. -
ctrl-don a compose file in:dirrunscompose -f <file> downafter a
confirm (#64);--readonlyrefuses it. -
keepHistoryinhotkeys.yamlnow does what it does in k9s (#64): the
view the hotkey opens goes on top of the current one, soesccomes back. -
overwriteOutputinplugins.yamlnow does what it does in k9s (#64): a
background plugin's first line of output replaces the "done" flash. -
A root shell on the daemon's host, k9s's node shell (#59):
:hostshell
for the daemon on screen — remote contexts and a plain dockerd included —
andson a Docker Desktop, OrbStack or Rancher Desktop row in the
runtimes view. It runs a privileged,--pid=host,--rmhelper that
nsenters PID 1 and starts the host'ssh. The image is
hostShell.imagein config.yaml (defaultalpine:3, pulled if the
daemon lacks it). It always confirms, naming the daemon and the image;
--readonlyand a context'sreadOnlyrefuse it, and so does a
rootless daemon, where it cannot work. Colima and Podman rows keep
their ssh. -
A
VULNcolumn in the images and containers views: each image's last
vulnerability scan, by severity (C2 H5, with medium and low when there
is room), read from a cache of scan results kept by image ID under the
state directory (scans/). Everyvscan is cached; a result older than
imageScans.ttl(a week) is marked with a trailing~, and sorting on
the column orders by severity. Off by default —imageScans.enableturns
it on, orviews.yamlcan nameVULN— andimageScans.backgroundscans
images with no fresh result one at a time while the images view is open.
Changed
iinspects the selected row, aso,dandydo; copying the full
ID moved fromitoI.enteron a ⎈ kind/k3d node opens the pods' containers inside it, as
enteron a node does in k9s;lis still the node's logs andnstill
works. The header's<enter>reads Pods on a node row.ctrl-ais now a dockmaster key: a hotkey or plugin onCtrl-Ais
refused at startup.- A hotkey,
-c,defaultViewor an alias may name a command by any
spelling the palette takes (x,log,h,dumps,screendumps,?);
those were refused as "not a command".
Fixed
?no longer runs off the bottom of a 40-row terminal: it lists keys,
and points atctrl-afor the:commands, which that list already
holds with every spelling. A test now fails when the help frame is
taller than the screen.- With plugins or hotkeys configured, their help columns stack under the
shortest columns instead of widening help past a 120-column screen and
cutting every description (tuikit v0.0.23's help overlay). (#84)
Full Changelog: v0.0.11...v0.0.12
v0.0.11
Fixed
- The table's border is k9s's
frame.border.focusColor(light sky blue)
only while the table has the keyboard; with the:or/bar or a
confirm open it isframe.border.fgColor(dodger blue), as k9s draws it.
It was the focus color all the time.
Full Changelog: v0.0.10...v0.0.11
v0.0.10
Added
- Per-docker-context settings: a
contexts:block inconfig.yamlgives a
context its ownskin,readOnlyanddefaultView, applied at startup
and on every context switch, and a switch with no landing of its own opens
the view last open on that context (kept in<state>/contexts.json).
--readonlystill forces read-only everywhere. (#55) - Expression columns in
views.yaml, k9s'sTITLE:<path>|<attributes>:
a column of a label (SVC:.Labels.com\.docker\.compose\.service) or a
field (.Command,.Created,.Mountpoint,.Scope, …) of the row,
read from the list the view already has, in the containers, images,
volumes and networks views. They sort, survive wide mode and reloads,
and take the attributesR,L,W(containers' wide mode),T(an
age) andN(sort as numbers); any other attribute, an unknown field or
a title that clashes is refused at load. (#61) sin the projects view scales a compose service, as k9s scales a
deployment: a form picks the service and its container count (prefilled
with the current one), thendocker compose up -d --scale svc=N --no-recreate svcruns against the project's files. Fewer containers
confirms; files not on this machine refuse it;--readonlyrefuses it.
son an:xrayproject or service node opens the same form. (#62)
Full Changelog: v0.0.9...v0.0.10
v0.0.9
Added
docs/commands.md: every:command, its spellings, what-ctakes and
each view's keys, kept complete by a test.-canddefaultViewtake any:command or alias, not only a table
view (-c xray,-c pg), and@contextgoes with any command that opens
a view (:xray @prod). (#57)- Hotkeys take k9s's
override, asked before the view's own keys; a k9s
hotkeys.yamlusing it failed to load. (#58) :xrayacts on the container under the cursor with the containers view's
keys:sshell,Aattach,ustart,xstop,Rrestart,Kkill
andctrl-dremove (both confirm),ppause / unpause,c/icopy its
name and ID;vscans an image node's image.--readonlyrefuses the
mutating ones, and the tree keeps its place as it refreshes after. (#56)dockmaster infoprints where dockmaster reads its config and skins and
writes its dumps, saved logs, log file and history, and the docker
context and endpoint it would use and how it chose them — without dialing
the daemon. (#60)- A log file,
<state>/dockmaster.log(--log-filemoves it,
--log-levelsets debug / info / warn / error, default warn): every error
that is flashed, plugin and hotkey runs, and context switches. Never env
values, a plugin's arguments or output, or what was typed into its inputs
form — only the inputs' names. Rotated once to.1at 5 MB. (#60)
Fixed
Pin the containers view prunes the stopped containers, as help and the
README said it did; it did nothing.:pullkeeps the reference's case::pull app:RC1pulledapp:rc1. (#52)?lists every:command,shift-f, and, over the projects view, the
project keys; a test now fails when a command is added without one. (#53)- The README's key table renders whole again, and
-cnames all eleven
views it opens, in its usage, its error and the README. (#54)
Full Changelog: v0.0.8...v0.0.9
v0.0.8
Added
- Plugins take k9s's
inputsandpipes. Inputs open a form before the
plugin runs (string, number, bool and dropdown fields, required ones
enforced), and each value reaches the command as$INPUT_<NAME>in its
args and environment; a plugin with inputs confirms by default. Pipes run
the command's output through further commands, as a pipeline dockmaster
builds itself, so no shell parses a value. A pipe of one word,background
with pipes, and inputs that k9s would accept but run differently are
refused whenplugins.yamlloads. (#18) :<view> @context, k9s's: switch to a docker context and open a view in
one command, with an optional filter —:containers @prod /web. (#18)
Full Changelog: v0.0.7...v0.0.8