Docker Security Best Practices: Hardened Containers That Pass Audits
Most Docker containers run as root, mount the Docker socket, and use images with hundreds of known CVEs. A single container escape means full host access. We harden your containers with non-root users, read-only filesystems, dropped capabilities, and distroless base images — security practices that pass SOC 2 and PCI audits.
Need this done for your project?
We implement, you ship. Async, documented, done in days.
Why Docker Security Matters
Containers share the host kernel. A container running as root with default capabilities can mount host filesystems, load kernel modules, and escape to the host. Docker's default security posture is permissive by design — it prioritizes compatibility over hardening.
In production, this means every container is a potential lateral movement path for attackers. A compromised web app container can reach the database container on the same network, read environment variables with credentials, and exfiltrate data. Hardening reduces the blast radius of a compromise from "full host access" to "one isolated process."
Our Security Hardening Practices
We apply defense-in-depth across every layer:
- Non-root user: Every Dockerfile ends with
USER appuser— processes run with minimal privileges. Files are owned by root but readable by the app user, preventing the app from modifying its own binaries. - Read-only filesystem:
read_only: truein Compose, withtmpfsmounts only where the app needs to write (e.g.,/tmp,/var/run). - Drop capabilities:
cap_drop: [ALL]removes all Linux capabilities. We add back only what is needed (rarely anything for web apps). - No new privileges:
security_opt: [no-new-privileges:true]prevents privilege escalation via setuid binaries. - Minimal base images: Distroless or Alpine — fewer packages means fewer CVEs and no shell for attackers to use.
- Image scanning: Trivy or Grype integrated into CI to block deployments with critical or high CVEs.
Network and Secret Security
Beyond container hardening, we secure the network and secret management:
- Network segmentation: Separate Docker networks for frontend and backend services. The web server can reach the app, but not the database directly.
- No Docker socket mounting: Never mount
/var/run/docker.sock— it gives full host control. - Secrets management: Credentials in Docker secrets or external vault, never in environment variables baked into images.
docker secretfor Swarm, orenv_filewith.envfiles excluded from version control. - Content trust: Enable
DOCKER_CONTENT_TRUST=1to verify image signatures.
What You Get
- Hardened Dockerfiles with non-root users and minimal base images
- Compose files with read-only filesystems, dropped capabilities, and no-new-privileges
- Network segmentation between service tiers
- CI pipeline with Trivy/Grype image scanning and CVE thresholds
- Security checklist document covering all hardening measures applied
- Remediation guide for any existing CVEs in your current images
Why Anubiz Engineering
Ready to get started?
Skip the research. Tell us what you need, and we'll scope it, implement it, and hand it back — fully documented and production-ready.