Network and Volume Commands
Commands for creating, inspecting, and troubleshooting Docker networks and volumes.
Network Commands
Listing and Inspecting
# List all networks
docker network ls
# Detailed network info (shows connected containers)
docker network inspect my-network
# List networks with filters
docker network ls --filter driver=bridge
docker network ls --filter scope=local
Creating Networks
# Create a bridge network
docker network create app-net
# Create with subnet
docker network create --subnet=172.20.0.0/16 app-net
# Create internal-only network (no internet access)
docker network create --internal backend
# Create with labels
docker network create --label project=myapp app-net
Connecting and Disconnecting
# Connect a running container to a network
docker network connect app-net my-container
# Connect with alias (additional DNS name)
docker network connect --alias api-service app-net my-container
# Disconnect from a network
docker network disconnect app-net my-container
Removing Networks
# Remove a specific network
docker network rm app-net
# Remove all unused networks
docker network prune
# Remove with force
docker network prune -f
Network Troubleshooting
DNS and Connectivity Testing
# Test DNS resolution from inside a container
docker exec -it my-app nslookup db
docker exec -it my-app ping -c 3 db
# Check which networks a container is on
docker inspect my-app --format '{{json .NetworkSettings.Networks}}'
# Check a container's IP address
docker inspect my-app --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
# Check port mappings
docker port my-app
# Detailed port mapping
docker inspect my-app --format '{{json .NetworkSettings.Ports}}'
Use a Debug Container
When your container does not have networking tools:
# Launch a debug container on the same network
docker run --rm -it --network app-net nicolaka/netshoot
# Inside netshoot:
nslookup db
curl http://api:8080/health
dig api
Troubleshooting Quick Reference
| Symptom | Check Command |
|---|---|
| Container can't resolve service name | docker exec CONTAINER nslookup SERVICENAME |
| Containers can't communicate | docker inspect CONTAINER --format '{{json .NetworkSettings.Networks}}' |
| Port not accessible from host | docker port CONTAINER |
| Need full network topology | docker network inspect NETWORK |
| Need all published ports | docker ps --format 'table {{.Names}}\t{{.Ports}}' |
Volume Commands
Listing and Inspecting
# List all volumes
docker volume ls
# List with filters
docker volume ls -f dangling=true # Unused volumes
docker volume ls -f driver=local
# Detailed volume info (mount point, labels, created date)
docker volume inspect my-data
# Check which volumes a container uses
docker inspect my-app --format '{{json .Mounts}}'
Creating Volumes
# Create a named volume
docker volume create app-data
# Create with labels
docker volume create --label project=myapp --label env=prod app-data
Using Volumes
# Named volume mount
docker run -d -v app-data:/var/lib/data my-app:1.0.0
# Bind mount (host directory)
docker run -d -v /host/path:/container/path my-app:1.0.0
# Read-only mount
docker run -d -v app-data:/data:ro my-app:1.0.0
# Tmpfs mount (in-memory, no persistence)
docker run -d --tmpfs /tmp my-app:1.0.0
Backup and Restore
# Backup a volume to a tar file
docker run --rm -v app-data:/source -v $(pwd):/backup alpine \
tar czf /backup/app-data-backup.tar.gz -C /source .
# Restore from backup
docker run --rm -v app-data:/target -v $(pwd):/backup alpine \
tar xzf /backup/app-data-backup.tar.gz -C /target
# Database-specific backup (PostgreSQL example)
docker exec my-postgres pg_dump -U postgres mydb > backup.sql
# Database restore
docker exec -i my-postgres psql -U postgres mydb < backup.sql
Removing Volumes
# Remove a specific volume
docker volume rm app-data
# Remove all unused volumes
docker volume prune
# Force remove
docker volume prune -f
Volume Prune Warning
docker volume prune deletes all volumes not attached to a running container. If your database container is stopped, its data volume will be deleted.
Mount Types Comparison
| Type | Syntax | Persistence | Use Case |
|---|---|---|---|
| Named volume | -v vol_name:/path | Persistent, Docker-managed | Database data, app state |
| Bind mount | -v /host:/container | Persistent, host-managed | Dev hot-reload, config files |
| Read-only mount | -v vol:/path:ro | Read-only access | Config, certificates |
| Tmpfs | --tmpfs /path | In-memory, ephemeral | Temp files, caches, secrets |
Combined Quick Reference
| Goal | Command |
|---|---|
| List networks | docker network ls |
| Create network | docker network create NAME |
| Inspect network | docker network inspect NAME |
| Join container to network | docker network connect NET CONTAINER |
| Remove unused networks | docker network prune |
| Container's network membership | docker inspect CONTAINER --format '{{json .NetworkSettings.Networks}}' |
| Container's IP address | docker inspect CONTAINER --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' |
| Port mappings | docker port CONTAINER |
| List volumes | docker volume ls |
| Create volume | docker volume create NAME |
| Inspect volume | docker volume inspect NAME |
| Check dangling volumes | docker volume ls -f dangling=true |
| Container's mounts | docker inspect CONTAINER --format '{{json .Mounts}}' |
| Backup volume | docker run --rm -v VOL:/src -v $(pwd):/bak alpine tar czf /bak/backup.tar.gz -C /src . |
| Remove volume | docker volume rm NAME |
| Remove unused volumes | docker volume prune (⚠ data loss) |
| DNS test | docker exec -it CONTAINER nslookup SERVICE |
What's Next
- Continue to Compose Commands.