jesseduffield/lazydocker · warning
{NoItemsMessage}
Error message
{NoItemsMessage} What it means
SideListPanel.GetSelectedItem returns this error when List.TryGet(SelectedIdx) fails — i.e. the side panel's list is empty (or the selected index is out of range). NoItemsMessage is per-panel: 'No services', 'No containers', 'No images', 'No volumes', 'No networks', so the message reflects which panel had nothing selected. The code itself admits 'could probably have a better error here'.
Source
Thrown at pkg/gui/panels/side_list_panel.go:156
return nil
}
mainView := self.Gui.GetMainView()
mainView.Tabs = self.ContextState.GetMainTabTitles()
mainView.TabIndex = self.ContextState.mainTabIdx
task := self.ContextState.GetCurrentMainTab().Render(item)
return self.Gui.QueueTask(task)
}
func (self *SideListPanel[T]) GetSelectedItem() (T, error) {
var zero T
item, ok := self.List.TryGet(self.SelectedIdx)
if !ok {
// could probably have a better error here
return zero, errors.New(self.NoItemsMessage)
}
return item, nil
}
func (self *SideListPanel[T]) HandleNextLine() error {
self.SelectNextLine()
return self.HandleSelect()
}
func (self *SideListPanel[T]) HandlePrevLine() error {
self.SelectPrevLine()
return self.HandleSelect()
}
func (self *SideListPanel[T]) HandleNextMainTab() error {View on GitHub (pinned to 7e7aadc207)
Solutions
- Wait for the first list refresh to complete, then retry the action.
- If the panel is genuinely empty, populate Docker first (pull an image, start a container) or switch panels.
- Check that lazydocker is pointed at the right docker context/host if lists are unexpectedly empty.
- Code-level: check List.Len() > 0 before calling GetSelectedItem or invoking key handlers.
Example fix
// before
item, err := panel.GetSelectedItem()
if err != nil {
return err
}
// after
if panel.List.Len() == 0 {
return nil // nothing to act on; ignore the keypress
}
item, err := panel.GetSelectedItem()
if err != nil {
return err
} Defensive patterns
Strategy: validation
Validate before calling
if panel.List.Len() == 0 {
return nil // no selection possible; ignore action
}
item, err := panel.GetSelectedItem()
if err != nil {
return err
} Try / catch
item, err := panel.GetSelectedItem()
if err != nil {
if err.Error() == panel.NoItemsMessage {
return nil // benign: nothing selected
}
return err
} Prevention
- Guard keybinding handlers with a list-length check before dereferencing the selection.
- Treat NoItemsMessage errors as no-ops, not failures — panels are legitimately empty sometimes.
- Ensure async list refreshes cannot leave SelectedIdx out of range when the list shrinks.
When it happens
Trigger: Calling GetSelectedItem (directly or via a keybinding handler like HandleNextLine/HandlePrevLine) on an empty side panel — e.g. the containers panel before the first docker ps refresh, or the volumes panel when the daemon has no volumes.
Common situations: Pressing navigation/action keys immediately after startup before the docker list populates; panels that are legitimately empty on fresh Docker installs (no images/volumes yet); a daemon connection that returns an empty list because of wrong context/permissions.
AI-assisted analysis of jesseduffield/lazydocker@7e7aadc207 (2026-08-15).
Data as JSON: /api/errors/7868108824e758e1.
Report an issue: GitHub.