Find Docker daemon logs

Locate dockerd diagnostics on systemd, rootless, and Docker Desktop installations, and keep them separate from application container logs.

Best practices
Illustration of server operations and log analysis

On a systemd-managed Linux Docker Engine host, start with journalctl -u docker.service. These records describe the Docker daemon's own startup, networking, storage, and runtime activity. They are separate from a container application's stdout and stderr.

Linux hosts

sudo journalctl -u docker.service -n 100 --no-pager
sudo journalctl -u docker.service -f
sudo journalctl -u docker.service --since '1 hour ago'

For a rootless installation managed as a user service, use the relevant user's journal:

journalctl --user -u docker.service -n 100 --no-pager

On non-systemd installations, inspect the actual service manager or launch command. Possible destinations include /var/log/docker.log, /var/log/messages, /var/log/syslog, or the launching terminal; none is universal.

Journal priority filtering such as -p err helps only when the priority stored in the journal reflects the daemon event level. Do not assume a textual level=error inside a captured stdout line is always mapped to the journal's error priority.

Docker Desktop

Docker Desktop runs the Linux engine inside a managed VM. The macOS host's process logs alone are not a complete view of dockerd.

Common diagnostic roots include:

  • macOS: ~/Library/Containers/com.docker.docker/Data/log/, including VM logs where supplied by that version.
  • Windows: %LOCALAPPDATA%\Docker\log\, with backend-specific host and VM records.

Use Docker Desktop's Troubleshoot/diagnostic workflow and the installed version's documented paths. VM backends and file names can change. For native Windows Docker Engine, consult its Windows event-log configuration rather than assuming Desktop's directory applies.

Adjust daemon verbosity deliberately

A daemon configuration can include:

{
  "log-level": "info",
  "debug": false
}

Merge settings with the existing configuration and check for conflicting startup flags. Enabling debug can help a bounded investigation but increases detail and volume. Apply changes using the installation's documented reload or restart procedure, considering running workloads, then restore normal verbosity.

Distinguish container logs

docker logs --tail 100 my-container
docker inspect --format '{{json .HostConfig.LogConfig}}' my-container

These inspect application output and the container's logging driver. Only some drivers store readable local files, and their paths can vary. For json-file, configure rotation such as max-size and max-file for newly created containers; do not edit the internal file to change its destination or retention.

If daemon output is deliberately written to a host file, DataKit file-log collection can collect that destination. For a journal source, use a collection method that actually reads the journal. Seeing application logs in a platform does not prove daemon diagnostics are collected.

FAQ

How do I narrow a noisy investigation?

Use a time window, service unit, and the exact error or container/image identifier. Preserve surrounding startup or retry context before filtering too aggressively.

Why is journalctl empty?

Confirm the host, rootful versus rootless service, unit name, permissions, and whether Docker Desktop is running the engine elsewhere. The machine running the Docker CLI need not be the daemon host.

How do I know collection works?

Choose an operation expected to produce a diagnostic at the configured level, inspect it locally, and then verify the same record at the destination. An ordinary successful image pull is not guaranteed to emit the record you expect at every log level.

Reference: Docker daemon log locations.

Get a tailored plan

Contact us

Join the community

Scan with WeChat
to join the community

Try Guance

Start online and pay only for what you use.

Get started

Choose a Guance plan

Code hosting