Podman Networking
Network Modes
Bridge Network (Default)
# Create container with bridge network
podman run -d --network=bridge nginx
# Containers get private IP
# Isolated from host network
Host Network
# Use host network stack
podman run -d --network=host nginx
# Container uses host IP
# No network isolation
# Better performance
None Network
# No networking
podman run -d --network=none nginx
# Completely isolated
# No network interfaces
Container Network
# Share another container's network
podman run -d --name web nginx
podman run -d --network=container:web alpine
Custom Networks
Create Network
# Create bridge network
podman network create mynet
# Create with subnet
podman network create --subnet=172.20.0.0/16 mynet
# Create with gateway
podman network create \
--subnet=172.20.0.0/16 \
--gateway=172.20.0.1 \
mynet
# Create with DNS
podman network create \
--dns=8.8.8.8 \
mynet
Manage Networks
# List networks
podman network ls
# Inspect network
podman network inspect mynet
# Remove network
podman network rm mynet
# Prune unused networks
podman network prune
Connect Containers
# Create network
podman network create app-net
# Run containers on network
podman run -d --name db --network=app-net postgres
podman run -d --name api --network=app-net node-api
# Connect existing container
podman network connect app-net existing-container
# Disconnect
podman network disconnect app-net existing-container
Port Mapping
Basic Port Mapping
# Map single port
podman run -d -p 8080:80 nginx
# Map to specific interface
podman run -d -p 127.0.0.1:8080:80 nginx
# Map multiple ports
podman run -d -p 8080:80 -p 8443:443 nginx
# Map port range
podman run -d -p 8000-8010:8000-8010 nginx
# Random host port
podman run -d -p 80 nginx
View Port Mappings
# List all port mappings
podman port mycontainer
# Specific port
podman port mycontainer 80
DNS Configuration
Custom DNS
# Set DNS servers
podman run -d --dns=8.8.8.8 --dns=8.8.4.4 nginx
# DNS search domains
podman run -d --dns-search=example.com nginx
# DNS options
podman run -d --dns-opt=ndots:2 nginx
Hosts File
# Add host entries
podman run -d --add-host=db:192.168.1.10 nginx
# Multiple entries
podman run -d \
--add-host=db:192.168.1.10 \
--add-host=cache:192.168.1.11 \
nginx
Network Aliases
# Create network
podman network create mynet
# Run with alias
podman run -d \
--name web \
--network=mynet \
--network-alias=webserver \
nginx
# Access via alias
podman run --rm --network=mynet alpine ping webserver
Container Communication
Same Network
# Create network
podman network create app-net
# Backend
podman run -d --name backend --network=app-net api-server
# Frontend (can access backend by name)
podman run -d --name frontend --network=app-net \
-e API_URL=http://backend:8080 \
web-app
Multiple Networks
# Create networks
podman network create frontend-net
podman network create backend-net
# Database (backend only)
podman run -d --name db --network=backend-net postgres
# API (both networks)
podman run -d --name api \
--network=frontend-net \
--network=backend-net \
api-server
# Web (frontend only)
podman run -d --name web --network=frontend-net nginx
Network Drivers
Bridge Driver
# Default driver
podman network create --driver=bridge mynet
Macvlan Driver
# Create macvlan network
podman network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
macvlan-net
# Run container
podman run -d --network=macvlan-net nginx
Network Troubleshooting
Inspect Network
# Network details
podman network inspect mynet
# Connected containers
podman network inspect --format='{{range .Containers}}{{.Name}} {{end}}' mynet
Test Connectivity
# Ping between containers
podman exec container1 ping container2
# Check DNS resolution
podman exec container1 nslookup container2
# View network interfaces
podman exec container1 ip addr
# Check routes
podman exec container1 ip route
# Test port connectivity
podman exec container1 nc -zv container2 8080
Debug Network Issues
# Check container IP
podman inspect --format='{{.NetworkSettings.IPAddress}}' mycontainer
# Check network settings
podman inspect --format='{{.NetworkSettings}}' mycontainer
# View iptables rules
sudo iptables -L -n -v
# Check CNI plugins
ls /usr/libexec/cni/
Best Practices
- Use Custom Networks: Better than default bridge
- Network Segmentation: Separate frontend/backend
- DNS Names: Use container names for communication
- Limit Exposure: Only expose necessary ports
- Use Network Aliases: For service discovery
- Monitor Traffic: Track network usage
- Secure Communication: Use TLS between services
- Clean Up: Remove unused networks
Next Steps