<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Docker Operations Guides on Netdata</title><link>https://www.netdata.cloud/guides/docker/</link><description>Recent content in Docker Operations Guides on Netdata</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://www.netdata.cloud/guides/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker commands hang: docker ps, inspect, and exec freezes</title><link>https://www.netdata.cloud/guides/docker/docker-commands-hang/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-commands-hang/</guid><description>&lt;h1 id="docker-commands-hang-docker-ps-inspect--exec-freezes">Docker Commands Hang: docker ps, inspect &amp;amp; exec Freezes&lt;/h1>
&lt;p>&lt;code>docker ps&lt;/code>, &lt;code>docker inspect&lt;/code>, and &lt;code>docker exec&lt;/code> hang while containers continue serving traffic. This is a Docker daemon hang: the management plane is dead while the data plane survives. Standard process monitors show &lt;code>dockerd&lt;/code> as alive, yet you cannot manage, inspect, or evacuate workloads.&lt;/p>
&lt;p>This guide covers how to distinguish a hang from a crash, identify whether the root cause is storage, a stuck shim, a plugin, or an internal deadlock, and recover without unnecessary host reboots or container kills.&lt;/p></description></item><item><title>Docker container cannot connect to another container</title><link>https://www.netdata.cloud/guides/docker/docker-container-cannot-connect-to-container/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-container-cannot-connect-to-container/</guid><description>&lt;h1 id="docker-container-cannot-connect-to-another-container">Docker Container Cannot Connect To Another Container&lt;/h1>
&lt;p>Connection timeouts or &amp;ldquo;connection refused&amp;rdquo; between containers on the same host point to a failure in one of four layers: the bridge network, Docker&amp;rsquo;s embedded DNS, iptables, or the application bind address. Inter-container networking relies on Linux bridges, veth pairs, iptables rules, and an embedded DNS resolver at 127.0.0.11. This guide isolates the faulty layer and fixes it.&lt;/p>
&lt;h2 id="what-this-means">What This Means&lt;/h2>
&lt;p>&lt;a href="https://www.netdata.cloud/guides/docker/">Docker&lt;/a> isolates each container in its own network namespace. Containers on the same custom bridge communicate through a Linux bridge and resolve each other by name via Docker&amp;rsquo;s embedded DNS. The default &lt;code>bridge&lt;/code> network has no embedded DNS. If containers are on different networks, if the target application binds to 127.0.0.1, or if iptables rules were wiped by an external firewall reload, traffic stops. The symptom appears at the application layer, but the root cause can be Layer 2, Layer 3, or the application itself.&lt;/p></description></item><item><title>Docker container cannot connect to the internet: diagnosis and fixes</title><link>https://www.netdata.cloud/guides/docker/docker-container-cannot-connect-to-internet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-container-cannot-connect-to-internet/</guid><description>&lt;h1 id="docker-container-cannot-connect-to-the-internet">Docker container cannot connect to the internet&lt;/h1>
&lt;p>The host may be online while Docker&amp;rsquo;s bridge, iptables rules, DNS proxy, or connection tracking table is in a broken state. Applications fail with connection timeouts, package managers stall, and external health checks return unhealthy. Isolate whether the failure is DNS, routing, packet filtering, or daemon state before fixing it.&lt;/p>
&lt;h2 id="what-this-means">What this means&lt;/h2>
&lt;p>Outbound connectivity from a container traverses the container&amp;rsquo;s network namespace, a veth pair attached to a bridge (docker0 or user-defined), iptables NAT and filter rules managed by Docker&amp;rsquo;s libnetwork, the host&amp;rsquo;s routing table, and the upstream physical interface. On user-defined networks, Docker&amp;rsquo;s embedded DNS resolver at 127.0.0.11 proxies queries to the host&amp;rsquo;s configured resolvers. On the default bridge network, there is no embedded DNS; containers inherit the host&amp;rsquo;s /etc/resolv.conf directly. A failure at any layer produces the same symptom: requests time out.&lt;/p></description></item><item><title>Docker container exits immediately: how to diagnose it</title><link>https://www.netdata.cloud/guides/docker/docker-container-exits-immediately/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-container-exits-immediately/</guid><description>&lt;h1 id="docker-container-exits-immediately-how-to-diagnose-it">Docker container exits immediately: how to diagnose it&lt;/h1>
&lt;p>A container that exits immediately prints its ID during &lt;code>docker run&lt;/code>, appears briefly in &lt;code>docker ps&lt;/code>, then vanishes. &lt;code>docker ps -a&lt;/code> lists it as &lt;code>Exited&lt;/code> with an uptime measured in seconds. Unlike a restart loop, it stays stopped.&lt;/p>
&lt;p>A Docker container is a Linux process wrapper, not a virtual machine. Its lifecycle is bound to PID 1 in the container&amp;rsquo;s namespace. When that process completes, crashes, or is killed, the container exits. An immediate exit means the process finished its work, failed to start, or was terminated during initialization. This guide gives you a diagnostic flow to find out why PID 1 terminated, interpret the exit code, and fix the root cause.&lt;/p></description></item><item><title>Docker container high CPU usage: causes and fixes</title><link>https://www.netdata.cloud/guides/docker/docker-container-high-cpu-usage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-container-high-cpu-usage/</guid><description>&lt;h1 id="docker-container-high-cpu-usage-causes-and-fixes">Docker container high CPU usage: causes and fixes&lt;/h1>
&lt;p>A container alert for high CPU is easy to generate but hard to interpret. Docker reports CPU as a percentage of total host cores, so a value of 340% on an 8-core machine simply means the container is using 3.4 cores. That might be expected for a multi-threaded workload, or it might signal a runaway process, CFS throttling, or a cryptominer. This guide shows how to distinguish legitimate compute from pathological behavior, and how to fix the root cause without restarting the container blindly.&lt;/p></description></item><item><title>Docker container high memory usage: how to diagnose it</title><link>https://www.netdata.cloud/guides/docker/docker-container-high-memory-usage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-container-high-memory-usage/</guid><description>&lt;h1 id="docker-container-high-memory-usage-how-to-diagnose-it">Docker Container High Memory Usage: How To Diagnose It&lt;/h1>
&lt;p>Your container is sitting at 90% of its memory limit but has not been OOMKilled. Or it is being killed repeatedly and you cannot tell whether the limit is too low or the application is leaking. docker stats shows a single percentage, but that number mixes reclaimable page cache with anonymous memory that the kernel cannot reclaim. To diagnose this correctly, you need to decompose cgroup memory.stat, map it to your runtime&amp;rsquo;s actual allocations, and decide whether the problem is cache pressure, a runtime mismatch, or a true leak.&lt;/p></description></item><item><title>Docker container keeps restarting: causes, checks, and fixes</title><link>https://www.netdata.cloud/guides/docker/docker-container-keeps-restarting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-container-keeps-restarting/</guid><description>&lt;h1 id="docker-container-keeps-restarting-causes-checks--fixes">Docker Container Keeps Restarting: Causes, Checks &amp;amp; Fixes&lt;/h1>
&lt;p>A container that restarts every few seconds is not self-healing. It is a crash loop that wastes CPU, floods logs, and masks the real failure. Docker&amp;rsquo;s restart policy can hide whether the application is OOM-killed, segfaulting, or waiting for a dependency that never arrives. This guide shows how to read the signals, map exit codes to causes, and stop the loop before it degrades the host.&lt;/p></description></item><item><title>Docker container memory leak: how to find one and prove it</title><link>https://www.netdata.cloud/guides/docker/docker-container-memory-leak/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-container-memory-leak/</guid><description>&lt;h1 id="docker-container-memory-leak-how-to-find-one-and-prove-it">Docker Container Memory Leak: How To Find One And Prove It&lt;/h1>
&lt;p>Memory that only ever climbs is easy to spot. The harder problem is proving whether the growth is a leak, unbounded caching, or a limit set below the working set. During an incident, operators need to decide in minutes whether to page an on-call developer or bump a cgroup limit. This guide shows how to use cgroup memory.stat, process-level RSS, and container restart patterns to build a defensible diagnosis. You will be able to separate anonymous memory growth from &lt;a href="https://www.netdata.cloud/guides/docker/docker-memory-usage-explained/">reclaimable cache&lt;/a>, identify whether the leak lives in application heap or runtime overhead, and present evidence that justifies either a code fix or a capacity change.&lt;/p></description></item><item><title>Docker container running but unhealthy: how to diagnose health check failures</title><link>https://www.netdata.cloud/guides/docker/docker-container-running-but-unhealthy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-container-running-but-unhealthy/</guid><description>&lt;h1 id="docker-container-running-but-unhealthy-how-to-diagnose-health-check-failures">Docker Container Running But Unhealthy: How To Diagnose Health Check Failures&lt;/h1>
&lt;p>The container is up. &lt;code>docker ps&lt;/code> shows it running. But the status is &lt;code>(unhealthy)&lt;/code> and your load balancer or orchestrator has stopped sending traffic. This means Docker&amp;rsquo;s health check command is returning a non-zero exit code, or timing out, while the container&amp;rsquo;s main process stays alive. The container is running, but Docker does not consider it ready.&lt;/p>
&lt;p>An unhealthy state is not a crash. In Swarm, it triggers replacement. In Compose, &lt;code>depends_on&lt;/code> with &lt;code>condition: service_healthy&lt;/code> blocks downstream services. Even on a single host, an unhealthy mark often precedes a restart loop that buries the real error in noise. You need to distinguish between a broken application, a broken probe, and a broken runtime configuration.&lt;/p></description></item><item><title>Docker CPU throttling: the hidden cause of container latency</title><link>https://www.netdata.cloud/guides/docker/docker-cpu-throttling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-cpu-throttling/</guid><description>&lt;h1 id="docker-cpu-throttling-the-hidden-cause-of-container-latency">Docker CPU Throttling: The Hidden Cause Of Container Latency&lt;/h1>
&lt;p>Your application latency just spiked. p99 response times doubled or tripled. CPU dashboards show the container at 40% utilization. Memory is fine. Network is quiet. You restart the container, redeploy, or blame the code, but the pattern repeats.&lt;/p>
&lt;p>The culprit is often CPU throttling. &lt;a href="https://www.netdata.cloud/guides/docker/">Docker&lt;/a> uses Linux CFS bandwidth control to enforce CPU limits in discrete 100ms periods. A container can exhaust its quota in a burst, spend the rest of each period throttled by the kernel, and still report a modest average CPU over a longer window. This guide shows how to confirm throttling from cgroup metrics, calculate its severity, and fix it without guessing.&lt;/p></description></item><item><title>Docker daemon not responding: how to troubleshoot a hung dockerd</title><link>https://www.netdata.cloud/guides/docker/docker-daemon-not-responding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-daemon-not-responding/</guid><description>&lt;h1 id="docker-daemon-not-responding-how-to-troubleshoot-a-hung-dockerd">Docker Daemon Not Responding: How To Troubleshoot A Hung Dockerd&lt;/h1>
&lt;p>A hung Docker daemon is one of the more disorienting production failures you can face. The process is still running, your containers are still serving traffic, but every &lt;code>docker&lt;/code> command hangs. You cannot inspect, stop, or create containers. Deployments stall. Automation times out.&lt;/p>
&lt;p>This guide covers the diagnostic ladder from socket probe to storage driver investigation, explains when to wait versus when to restart, and describes what to avoid when you are not sure what is wrong.&lt;/p></description></item><item><title>Docker disk space full: how to troubleshoot /var/lib/docker</title><link>https://www.netdata.cloud/guides/docker/docker-disk-space-full/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-disk-space-full/</guid><description>&lt;h1 id="docker-disk-space-full-how-to-troubleshoot-varlibdocker">Docker Disk Space Full: How To Troubleshoot /var/lib/docker&lt;/h1>
&lt;p>You notice deployments failing with &amp;ldquo;no space left on device,&amp;rdquo; image pulls hanging, or the Docker daemon becoming sluggish. On a &lt;a href="https://www.netdata.cloud/guides/docker/">Docker&lt;/a> host, everything lives under /var/lib/docker: image layers, container writable layers and logs, named volumes, and build cache. When this filesystem fills, the failure is cascading and abrupt. New containers cannot start, running containers may fail on writes, and daemon operations deadlock.&lt;/p></description></item><item><title>Docker DNS not working inside containers</title><link>https://www.netdata.cloud/guides/docker/docker-dns-not-working/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-dns-not-working/</guid><description>&lt;h1 id="docker-dns-not-working-inside-containers">Docker DNS not working inside containers&lt;/h1>
&lt;p>Your application logs show connection timeouts. Health checks against dependency names are failing. &lt;code>curl&lt;/code> from inside a container returns &amp;ldquo;Could not resolve host&amp;rdquo; while the same name resolves fine on the host. DNS inside Docker is not a simple passthrough to the host resolver. It is a stack of namespace-specific forwarders, embedded resolvers, and inherited configuration that breaks in specific, repeatable ways.&lt;/p>
&lt;p>This guide will help you determine whether the failure is a missing embedded DNS, a poisoned resolv.conf, an upstream forwarding issue, or a version regression. You will be able to distinguish between inter-container name resolution failures and external lookup failures, identify the root cause with safe read-only checks, and apply the correct fix without guessing.&lt;/p></description></item><item><title>Docker exit code 1: application errors and how to find them</title><link>https://www.netdata.cloud/guides/docker/docker-exit-code-1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-exit-code-1/</guid><description>&lt;h1 id="docker-exit-code-1-application-errors-and-how-to-find-them">Docker Exit Code 1: Application Errors And How To Find Them&lt;/h1>
&lt;p>A container exiting immediately with code 1 is a common production incident. Unlike exit code 137 (OOM killer) or code 125 (Docker daemon error), code 1 means the application inside the container called &lt;code>exit(1)&lt;/code>. &lt;a href="https://www.netdata.cloud/guides/docker/">Docker&lt;/a> is only reporting what PID 1 did.&lt;/p>
&lt;p>The challenge is that code 1 is a catch-all. It can mask an unhandled JavaScript exception, a Python import error, a missing configuration file, a shell script failing under &lt;code>set -e&lt;/code>, or a Go binary that cannot reach its database. Time spent checking Docker daemon health or host memory is wasted when the real failure is an application-level error written to stdout or stderr.&lt;/p></description></item><item><title>Docker exit code 137: OOMKilled or SIGKILL?</title><link>https://www.netdata.cloud/guides/docker/docker-exit-code-137/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-exit-code-137/</guid><description>&lt;h1 id="docker-exit-code-137-oomkilled-or-sigkill">Docker Exit Code 137: OOMKilled Or SIGKILL?&lt;/h1>
&lt;p>A container exits with code 137. Docker restarts it, or it stays down, and you need to know why. The number itself only tells you that the process received SIGKILL. What matters for your next step is whether the kernel&amp;rsquo;s cgroup OOM killer fired because the container exceeded its memory limit, or whether an external actor sent the signal. The remediation for an undersized memory limit is completely different from fixing a misconfigured stop timeout or an orchestrator sending a premature kill. This guide shows how to classify the cause in under a minute using only the Docker CLI and cgroup files.&lt;/p></description></item><item><title>Docker exit code 143: SIGTERM and graceful shutdown failures</title><link>https://www.netdata.cloud/guides/docker/docker-exit-code-143/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-exit-code-143/</guid><description>&lt;h1 id="docker-exit-code-143-sigterm-and-graceful-shutdown-failures">Docker exit code 143: SIGTERM and graceful shutdown failures&lt;/h1>
&lt;p>You are reviewing container exit codes after a deployment or node drain and see 143. If your monitoring alerts on it, you might think something failed. Exit code 143 is not an error. It is 128 plus signal 15 (SIGTERM), and it means the container&amp;rsquo;s PID 1 process received SIGTERM and exited voluntarily. This is exactly what &lt;code>docker stop&lt;/code> is designed to do.&lt;/p></description></item><item><title>Docker image cleanup: safe pruning strategies for production hosts</title><link>https://www.netdata.cloud/guides/docker/docker-image-cleanup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-image-cleanup/</guid><description>&lt;h1 id="docker-image-cleanup-safe-pruning-strategies-for-production-hosts">Docker image cleanup: safe pruning strategies for production hosts&lt;/h1>
&lt;p>When &lt;code>df -h /var/lib/docker&lt;/code> shows 87% utilization, the urge to run &lt;code>docker system prune -a&lt;/code> is strong. On production hosts, that is a mistake. Cleanup is not about finding the single command that reclaims the most space. It is about knowing exactly what each flag deletes, what it leaves behind, and which filters prevent a 3 a.m. image re-pull because a base layer was removed.&lt;/p></description></item><item><title>Docker image pull failures: registry, network, and auth diagnosis</title><link>https://www.netdata.cloud/guides/docker/docker-image-pull-failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-image-pull-failures/</guid><description>&lt;h1 id="docker-image-pull-failures-registry-network--auth-diagnosis">Docker Image Pull Failures: Registry, Network &amp;amp; Auth Diagnosis&lt;/h1>
&lt;h2 id="what-this-means">What This Means&lt;/h2>
&lt;p>When you run &lt;code>docker pull&lt;/code>, the daemon negotiates a TLS connection to the registry, authenticates if required, resolves the manifest for the requested tag and architecture, then downloads missing layers. If any step fails, the pull aborts.&lt;/p>
&lt;p>Registry errors surface as HTTP 429 or 401/403 responses. Network errors appear as timeouts, connection resets, or TLS handshake failures. Local problems such as a full disk or a hung daemon can also abort a pull even when the registry is healthy. In orchestrated environments, a single node&amp;rsquo;s pull failure can trigger the scheduler to retry on other nodes, turning a localized auth error into a cluster-wide rate limit storm. Distinguishing these layers quickly is the difference between a five-minute fix and a prolonged outage.&lt;/p></description></item><item><title>Docker JVM memory tuning: heap, off-heap, and the cgroup mismatch</title><link>https://www.netdata.cloud/guides/docker/docker-jvm-memory-tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-jvm-memory-tuning/</guid><description>&lt;h1 id="docker-jvm-memory-tuning-heap-off-heap-and-the-cgroup-mismatch">Docker JVM Memory Tuning: Heap, Off-Heap, And The cgroup Mismatch&lt;/h1>
&lt;p>Your Java container is &lt;a href="https://www.netdata.cloud/guides/docker/docker-oomkilled/">OOMKilled&lt;/a> at 02:00. Heap usage is 60%. Docker reports exit code 137 and &lt;code>OOMKilled: true&lt;/code>. The JVM never threw an &lt;code>OutOfMemoryError&lt;/code>.&lt;/p>
&lt;p>In a container, the kernel enforces memory limits through cgroups, but the JVM heap is only one component of process RSS. Off-heap memory, metaspace, thread stacks, direct byte buffers, and GC overhead all count against the same cgroup limit. When total RSS crosses that limit, the kernel kills the container without a JVM-level error. In some JDK and kernel combinations, the JVM fails to detect the cgroup limit entirely and sizes the heap against host RAM, which guarantees an OOM kill.&lt;/p></description></item><item><title>Docker log rotation: preventing json-file logs from filling disk</title><link>https://www.netdata.cloud/guides/docker/docker-log-rotation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-log-rotation/</guid><description>&lt;h1 id="docker-log-rotation-preventing-json-file-logs-from-filling-disk">Docker Log Rotation: Preventing json-file Logs From Filling Disk&lt;/h1>
&lt;p>Docker&amp;rsquo;s default &lt;code>json-file&lt;/code> log driver appends every line of container stdout and stderr to a JSON file on the host under &lt;code>/var/lib/docker/containers/&amp;lt;id&amp;gt;/&lt;/code>. Without size limits, that file grows monotonically. A single verbose container can consume tens of gigabytes, and because the driver is the default, this often happens silently until &lt;code>/var/lib/docker&lt;/code> fills. At that point image pulls fail, container creates are rejected, and the daemon may hang on storage operations. This guide covers how to cap log files with &lt;code>daemon.json&lt;/code> and per-container &lt;code>log-opt&lt;/code> overrides, verify the caps are working, and choose a different driver when json-file is not appropriate.&lt;/p></description></item><item><title>Docker logs taking too much disk space: how to fix log growth</title><link>https://www.netdata.cloud/guides/docker/docker-logs-disk-space/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-logs-disk-space/</guid><description>&lt;h1 id="docker-logs-taking-too-much-disk-space-how-to-fix-log-growth">Docker Logs Taking Too Much Disk Space: How To Fix Log Growth&lt;/h1>
&lt;p>The default json-file logging driver captures every line a container writes to stdout and stderr and appends it to a file under &lt;code>/var/lib/docker/containers/&lt;/code>. There is no size limit out of the box. A container with verbose logging, a stuck retry loop, or a crash spiral can grow its log file by gigabytes per day until the filesystem is full.&lt;/p></description></item><item><title>Docker memory limits: how to set them and what happens when they hit</title><link>https://www.netdata.cloud/guides/docker/docker-memory-limits/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-memory-limits/</guid><description>&lt;h1 id="docker-memory-limits-how-to-set-them-and-what-happens-when-they-hit">Docker memory limits: how to set them and what happens when they hit&lt;/h1>
&lt;p>A container without a memory limit can consume all available RAM, force the kernel to reclaim page cache, push the system into swap, and eventually trigger a host-level OOM kill that takes down the Docker daemon or other critical processes. Setting &lt;code>--memory&lt;/code> is not enough: limits can be silently ignored, misread by runtimes, or masked by swap behavior that turns a clean failure into a slow crawl.&lt;/p></description></item><item><title>Docker memory usage explained: anonymous, file, slab, and what counts</title><link>https://www.netdata.cloud/guides/docker/docker-memory-usage-explained/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-memory-usage-explained/</guid><description>&lt;h1 id="docker-memory-usage-explained-anonymous-file-slab-and-what-counts">Docker memory usage explained: anonymous, file, slab, and what counts&lt;/h1>
&lt;p>You look at &lt;code>docker stats&lt;/code>, see a container sitting at 1.2 GB of a 1.5 GB limit, and assume it is about to explode. It might be fine. That total includes page cache the kernel will reclaim the second another process asks for memory. Meanwhile, a different container reports 600 MB with no limit set, yet its anonymous memory grows 50 MB per hour and will force a host-level OOM kill before lunch.&lt;/p></description></item><item><title>Docker monitoring checklist: the signals every production host needs</title><link>https://www.netdata.cloud/guides/docker/docker-monitoring-checklist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-monitoring-checklist/</guid><description>&lt;h1 id="docker-monitoring-checklist-the-signals-every-production-host-needs">Docker Monitoring Checklist: The Signals Every Production Host Needs&lt;/h1>
&lt;p>Production Docker incidents rarely look like Docker problems at first. They show up as application latency, deployment failures, or hosts that suddenly refuse to schedule containers. By the time you notice, the daemon may be hung, a log file has filled the disk, or a container has been silently throttled into unusable latency. This checklist groups the essential production signals into three priority tiers: must-have alerts that keep the host alive, should-have metrics that expose resource pressure before it becomes an outage, and nice-to-have security and internal signals for mature environments. Every signal includes where to read it from the raw cgroup filesystem or the Docker API so you can instrument hosts without guessing paths.&lt;/p></description></item><item><title>Docker OOMKilled: causes, detection, and prevention</title><link>https://www.netdata.cloud/guides/docker/docker-oomkilled/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-oomkilled/</guid><description>&lt;h1 id="docker-oomkilled-causes-detection-and-prevention">Docker OOMKilled: causes, detection, and prevention&lt;/h1>
&lt;p>A container exits with code 137 and restarts. The application loses in-memory state. Dependent services start failing. The restart loop begins. This is the OOMKilled pattern, and it is one of the most common and most misdiagnosed failure modes in Docker environments.&lt;/p>
&lt;p>This article covers how to confirm an OOM kill, distinguish it from an external SIGKILL, understand why it happened, and prevent recurrence. It also covers the JVM-in-container memory mismatch, which is responsible for a large share of OOM kills in Java workloads.&lt;/p></description></item><item><title>Docker port binding: address already in use</title><link>https://www.netdata.cloud/guides/docker/docker-port-binding-address-already-in-use/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-port-binding-address-already-in-use/</guid><description>&lt;h1 id="docker-port-binding-address-already-in-use">Docker port binding: address already in use&lt;/h1>
&lt;p>A &lt;code>docker run -p 8080:80&lt;/code> or &lt;code>docker compose up&lt;/code> fails with &lt;code>bind: address already in use&lt;/code>. The error is clear, but the owner is not. &lt;code>ss&lt;/code> may show a system service. &lt;code>docker ps&lt;/code> may show nothing, yet Docker still refuses. The port can appear free while an orphaned DNAT rule or a split firewall backend blocks the bind.&lt;/p>
&lt;p>Distinguish a genuine socket conflict from an orphaned DNAT rule, a rootless Docker regression, and a WSL2 iptables/nftables split brain. Then reclaim the port and prevent recurrence.&lt;/p></description></item><item><title>Docker published port not reachable: troubleshooting -p and EXPOSE</title><link>https://www.netdata.cloud/guides/docker/docker-published-port-not-reachable/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-published-port-not-reachable/</guid><description>&lt;h1 id="docker-published-port-not-reachable-troubleshooting--p-and-expose">Docker published port not reachable: troubleshooting -p and EXPOSE&lt;/h1>
&lt;p>You mapped a port with &lt;code>-p 8080:80&lt;/code>, but &lt;code>curl&lt;/code> against the host IP returns connection refused. &lt;code>docker ps&lt;/code> shows the mapping, the container is running, and the port still appears closed.&lt;/p>
&lt;p>A published port depends on three layers: a runtime mapping rule (&lt;code>-p&lt;/code>), a host forwarding path (iptables DNAT and FORWARD policy), and an application listener inside the container bound to an interface that receives the forwarded packet. EXPOSE in a Dockerfile is metadata. It does not publish ports, create firewall rules, or set bind addresses.&lt;/p></description></item><item><title>Docker socket security: why /var/run/docker.sock is root access</title><link>https://www.netdata.cloud/guides/docker/docker-socket-security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-socket-security/</guid><description>&lt;h1 id="docker-socket-security-why-varrundockersock-is-root-access">Docker socket security: why /var/run/docker.sock is root access&lt;/h1>
&lt;p>Mounting &lt;code>/var/run/docker.sock&lt;/code> into a container grants that container a root-equivalent privilege boundary. This is not a Docker vulnerability. The daemon runs as root, listens on a filesystem socket, and trusts any client that can write to it.&lt;/p>
&lt;p>Symptoms of abuse look like container escape or host compromise, but the container never escaped. It asked the root-owned daemon to perform privileged operations on its behalf. This guide explains the mechanism, how to audit exposure, and what constraints you can apply without rebuilding your pipeline.&lt;/p></description></item><item><title>Docker volume cleanup: finding and removing orphaned volumes</title><link>https://www.netdata.cloud/guides/docker/docker-volume-cleanup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-volume-cleanup/</guid><description>&lt;h1 id="docker-volume-cleanup-finding-and-removing-orphaned-volumes">Docker volume cleanup: finding and removing orphaned volumes&lt;/h1>
&lt;p>Run &lt;code>docker system df&lt;/code> and the &lt;code>Local Volumes&lt;/code> line keeps growing. Run &lt;code>docker system prune&lt;/code> and you reclaim images and build cache, but the volume count barely drops. A few weeks later the disk alert fires again.&lt;/p>
&lt;p>Data persists in &lt;code>/var/lib/docker/volumes/&lt;/code> after its consumer is long gone. These volumes waste disk, complicate capacity planning, and can hide sensitive data in forgotten corners of the filesystem.&lt;/p></description></item><item><title>Reading docker system df: where Docker disk usage actually lives</title><link>https://www.netdata.cloud/guides/docker/docker-system-df/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/docker/docker-system-df/</guid><description>&lt;h1 id="reading-docker-system-df-where-docker-disk-usage-actually-lives">Reading docker system df: Where Docker Disk Usage Actually Lives&lt;/h1>
&lt;p>You run &lt;code>docker system df&lt;/code> but the numbers do not add up to what &lt;code>df -h&lt;/code> reports. Maybe the Build Cache row is empty while &lt;code>/var/lib/docker/buildkit/&lt;/code> consumes tens of gigabytes. Maybe RECLAIMABLE is high but &lt;code>docker system prune&lt;/code> barely frees space because overlay2 layer sharing masks the real unique cost. Or the daemon returns &lt;code>Error response from daemon&lt;/code> when the disk is already full. This guide shows how to read &lt;code>docker system df&lt;/code> precisely, what it hides, and how to triage the real consumers on the host.&lt;/p></description></item></channel></rss>