Skip to main content

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

SymptomCheck Command
Container can't resolve service namedocker exec CONTAINER nslookup SERVICENAME
Containers can't communicatedocker inspect CONTAINER --format '{{json .NetworkSettings.Networks}}'
Port not accessible from hostdocker port CONTAINER
Need full network topologydocker network inspect NETWORK
Need all published portsdocker 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

TypeSyntaxPersistenceUse Case
Named volume-v vol_name:/pathPersistent, Docker-managedDatabase data, app state
Bind mount-v /host:/containerPersistent, host-managedDev hot-reload, config files
Read-only mount-v vol:/path:roRead-only accessConfig, certificates
Tmpfs--tmpfs /pathIn-memory, ephemeralTemp files, caches, secrets

Combined Quick Reference

GoalCommand
List networksdocker network ls
Create networkdocker network create NAME
Inspect networkdocker network inspect NAME
Join container to networkdocker network connect NET CONTAINER
Remove unused networksdocker network prune
Container's network membershipdocker inspect CONTAINER --format '{{json .NetworkSettings.Networks}}'
Container's IP addressdocker inspect CONTAINER --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
Port mappingsdocker port CONTAINER
List volumesdocker volume ls
Create volumedocker volume create NAME
Inspect volumedocker volume inspect NAME
Check dangling volumesdocker volume ls -f dangling=true
Container's mountsdocker inspect CONTAINER --format '{{json .Mounts}}'
Backup volumedocker run --rm -v VOL:/src -v $(pwd):/bak alpine tar czf /bak/backup.tar.gz -C /src .
Remove volumedocker volume rm NAME
Remove unused volumesdocker volume prune (⚠ data loss)
DNS testdocker exec -it CONTAINER nslookup SERVICE

What's Next