Port 2375 is the Docker daemon's unencrypted REST API port. When exposed, any client can control the entire Docker host – pull images, run containers, mount host filesystems, and achieve full root-equivalent code execution. Port 2375 must never be exposed to any network. Use Unix socket (/var/run/docker.sock) locally, or TLS-protected port 2376 for remote access.
Port Number
2375
Protocol
TCP
Service
Docker Remote API
Range
IANA Registered (1024–49151)
Test if Docker API is exposed (if this returns data, you are critically vulnerable)
curl -s http://host:2375/version | jq .ApiVersionCheck if port 2375 is open remotely
nmap -p 2375 targetCheck if dockerd is listening on TCP 2375 locally
ss -tnlp sport = :2375Find any configuration enabling TCP 2375
grep -r '2375' /etc/docker/ /etc/systemd/system/docker*curl http://localhost:2375/version
# NEVER: -H tcp://0.0.0.0:2375 in dockerd config
docker context create remote --docker host=tcp://server:2376Docker was released in 2013. Port 2375 was chosen for the unencrypted API, 2376 for TLS. Early Docker documentation showed TCP socket configuration for remote access, leading to widespread exposure. Docker 1.12 (2016) added Swarm mode with built-in TLS on port 2377. Modern Docker defaults to Unix socket only.
Is Docker socket (/var/run/docker.sock) any safer than port 2375?
Yes – the socket is only accessible to users in the 'docker' group (effectively root-equivalent locally, but not remotely exploitable). Port 2375 is remotely exploitable by anyone on the network. The socket is the correct default; never replace it with TCP 2375.
How do I set up secure remote Docker access?
Generate TLS certificates (dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://0.0.0.0:2376). Clients use: docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://host:2376. Or use SSH: docker -H ssh://user@host.