Docker Core
The kernel refused the bind because a live socket already occupies the address.
address-already-in-useReviewed for reference consistency: August 11, 2026
The kernel refused the bind because a live socket already occupies the address.
What address-already-in-use Means
The address-already-in-use error on the Docker Core indicates the kernel refused the bind because a live socket already occupies the address.. This typically occurs due to a non-docker process owns the port on the requested interface.
Underneath the allocator sits the actual system bind. When the address is taken by a process the daemon's bookkeeping does not track, the proxy component reports the kernel's address-already-in-use condition, usually wrapped in the userland proxy line.
How to fix address-already-in-use
General informational guidance, not professional advice. Commands can affect your system or data — back up first and proceed at your own risk. FixerCode is an independent reference, not affiliated with any vendor mentioned.
Find every listener on the failing port
The numeric socket listing with process names shows what already holds the address the daemon tried to bind.
ss -ltnp | grep ':3000'Show the publish spec the container requested
The inspect view under NetworkSettings.Ports records the host IP and published port the daemon attempted.
docker container inspect --format '{{json .NetworkSettings.Ports}}' <container>
Technical Background
The distinction from the port-allocation sibling is the source of the refusal: here the kernel itself rejects the bind because a socket exists, which shifts attention from container bookkeeping to the host's own process table.
The wording arrives through the userland proxy component that implements published ports on some platforms, so the output often carries two messages: the proxy's failure followed by the kernel's reason.
Common Causes
- A non-Docker process owns the port on the requested interface
- The publish targets the wildcard address while another listener holds the paired family
- A lingering listener from a recently killed process still holds the socket
- Docker Desktop's forwarding layer conflicts with a local server
Typical Scenarios
- A local dev server already listening on 3000 when a container requests the same port
- A VPN or security agent claiming a low port during container startup
- A dual-stack publish where the IPv6 wildcard covers the IPv4 request
What to Know
Because a foreign process is the usual trigger, the printed host port is the lead; mapping that port to a PID from the host's socket table identifies the competing listener without touching container state.
Frequently Asked Questions
Common questions about Docker address-already-in-use error
Desktop forwards published ports through a host-side layer; collisions in that layer reproduce the kernel's wording even when plain host tools show the port free.
Rarely. The image exposes ports but does not choose host bindings; the publish flag and the host's existing listeners decide the conflict.
Related Error Codes
The daemon could not bind the published host port because another holder keeps it.
The network driver could not program the published port mapping for the endpoint.
A container claims the requested human name, and names must stay unique.
Related Errors From Other Categories
Similar error codes documented across different platforms and systems