# DNS Troubleshooting Guide for Puffin Backend ## Current Issue Backend container cannot resolve `api.wren.co` despite DNS servers (8.8.8.8, 8.8.4.4) configured in docker-compose.yml. ## Diagnostic Steps ### 1. Verify DNS Config in Running Container ```bash docker exec puffin-backend cat /etc/resolv.conf ``` **Expected**: Should show `nameserver 8.8.8.8` and `nameserver 8.8.4.4` **If not**: Container wasn't recreated properly ### 2. Test DNS Resolution from Container ```bash # Test with nslookup (if available) docker exec puffin-backend nslookup api.wren.co # Test with getent (usually available) docker exec puffin-backend getent hosts api.wren.co # Test with wget docker exec puffin-backend wget -O- --timeout=5 https://api.wren.co/v1/offset_orders 2>&1 | head -20 ``` ### 3. Check if Host Can Resolve DNS ```bash # On the host machine nslookup api.wren.co ping api.wren.co ``` **If host can't resolve**: Host DNS issue, not Docker issue ### 4. Check Docker Daemon DNS Configuration ```bash # Check Docker daemon config cat /etc/docker/daemon.json # Check Docker network DNS docker network inspect puffin-network | grep -A 5 "IPAM" ``` ### 5. Test with Different DNS Servers Try Cloudflare DNS instead of Google: ```yaml dns: - 1.1.1.1 - 1.0.0.1 ``` ### 6. Check Firewall Rules ```bash # Check if firewall is blocking DNS from containers sudo iptables -L -n | grep -i dns sudo ufw status verbose # Temporarily disable firewall to test (BE CAREFUL) sudo ufw disable # Test, then re-enable: sudo ufw enable ``` ### 7. Check Docker Network Isolation ```bash # Check if Docker bridge has internet access docker run --rm busybox ping -c 3 8.8.8.8 docker run --rm busybox nslookup api.wren.co 8.8.8.8 ``` ## Solutions to Try ### Solution 1: Use Host Network Mode (Testing Only) **WARNING**: Less secure, only for testing ```yaml backend: network_mode: "host" # Remove 'networks' and 'ports' when using host mode ``` ### Solution 2: Update Docker Daemon DNS Edit `/etc/docker/daemon.json`: ```json { "dns": ["8.8.8.8", "8.8.4.4"] } ``` Then restart Docker: ```bash sudo systemctl restart docker ``` ### Solution 3: Use Host's DNS Resolver ```yaml backend: dns: - 8.8.8.8 - 8.8.4.4 extra_hosts: - "api.wren.co:HOST_IP_HERE" ``` ### Solution 4: Disable Docker's Userland Proxy Edit `/etc/docker/daemon.json`: ```json { "userland-proxy": false, "dns": ["8.8.8.8", "8.8.4.4"] } ``` ### Solution 5: Force Recreate with Network Cleanup ```bash # Stop everything docker-compose down # Remove network docker network rm puffin-network # Recreate with proper DNS docker-compose up -d --force-recreate ``` ## Current Status - ✅ DNS servers added to docker-compose.yml (8.8.8.8, 8.8.4.4) - ✅ Stripe webhooks working (proves network connectivity works) - ❌ DNS resolution failing with ENOTFOUND api.wren.co - ❌ Error occurs after only 26ms (DNS query not reaching nameservers) ## Next Actions 1. Run diagnostic commands above to identify exact failure point 2. Check if issue is container-specific or host-wide 3. Apply appropriate solution based on findings