jesseduffield/lazydocker · warning

Cannot proceed until docker gives us more information about

Error message

Cannot proceed until docker gives us more information about the container. Please retry in a few moments.

What it means

Thrown by Container.Attach() when c.DetailsLoaded() is false, meaning lazydocker has not yet received the container's inspect payload from the Docker daemon. It is a transient guard: the container exists in the list, but its full Config/State (fetched asynchronously) has not arrived yet. The message (c.Tr.WaitingForContainerInfo) explicitly asks the user to retry in a few moments rather than signaling permanent failure.

Source

Thrown at pkg/commands/container.go:93

	return c.Client.ContainerPause(context.Background(), c.ID)
}

// Unpause unpauses the container
func (c *Container) Unpause() error {
	c.Log.Warn(fmt.Sprintf("unpausing container %s", c.Name))
	return c.Client.ContainerUnpause(context.Background(), c.ID)
}

// Restart restarts the container
func (c *Container) Restart() error {
	c.Log.Warn(fmt.Sprintf("restarting container %s", c.Name))
	return c.Client.ContainerRestart(context.Background(), c.ID, container.StopOptions{})
}

// Attach attaches the container
func (c *Container) Attach() (*exec.Cmd, error) {
	if !c.DetailsLoaded() {
		return nil, errors.New(c.Tr.WaitingForContainerInfo)
	}

	// verify that we can in fact attach to this container
	if !c.Details.Config.OpenStdin {
		return nil, errors.New(c.Tr.UnattachableContainerError)
	}

	if c.Container.State == "exited" {
		return nil, errors.New(c.Tr.CannotAttachStoppedContainerError)
	}

	c.Log.Warn(fmt.Sprintf("attaching to container %s", c.Name))
	// TODO: use SDK
	cmd := c.OSCommand.NewCmd("docker", "attach", "--sig-proxy=false", c.ID)
	return cmd, nil
}

// Top returns process information

View on GitHub (pinned to 7e7aadc207)

Solutions

  1. Wait a few seconds and retry the attach action — the details usually populate within one refresh cycle.
  2. If it persists, verify the Docker daemon is responsive (docker ps, docker inspect <id>) — a hung daemon never populates details.
  3. Check connectivity to remote/SSH Docker hosts; a slow or dropping connection delays the inspect call indefinitely.
  4. As a code-level fix, poll DetailsLoaded() with a short timeout before invoking Attach().

Example fix

// before
cmd, err := container.Attach()
if err != nil {
    return err
}

// after
 deadline := time.Now().Add(5 * time.Second)
for !container.DetailsLoaded() {
    if time.Now().After(deadline) {
        return err
    }
    time.Sleep(100 * time.Millisecond)
}
cmd, err := container.Attach()
if err != nil {
    return err
}
Defensive patterns

Strategy: retry

Validate before calling

// before attaching, wait for details to load
for i := 0; i < 50 && !container.DetailsLoaded(); i++ {
    time.Sleep(100 * time.Millisecond)
}
if !container.DetailsLoaded() {
    return fmt.Errorf("container details not available yet")
}

Try / catch

err := retry(3, 500*time.Millisecond, func() error { _, err := container.Attach(); return err })
if err != nil { /* only surface after retries exhausted */ }

Prevention

When it happens

Trigger: Calling Container.Attach() right after lazydocker starts, immediately after the container list refreshes, or right after a container is created, before the background Inspect() call that populates c.Details completes.

Common situations: User presses 'a' (attach) on a freshly-listed container within the first moments of the UI loading; attaching to a container that was just created via docker run from another terminal; slow Docker daemon over a remote DOCKER_HOST causing inspect to lag behind listing.

Related errors


AI-assisted analysis of jesseduffield/lazydocker@7e7aadc207 (2026-08-15). Data as JSON: /api/errors/7246af1c15918b29. Report an issue: GitHub.