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

  1. Wait for the first list refresh to complete, then retry the action.
  2. If the panel is genuinely empty, populate Docker first (pull an image, start a container) or switch panels.
  3. Check that lazydocker is pointed at the right docker context/host if lists are unexpectedly empty.
  4. 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

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.