Skip to main content

Expose Docker App to Internet - Methods Guide

To make your Docker app accessible from the internet, there are multiple methods, each with different levels of complexity, flexibility, and security. Below is a comprehensive list:


✅ 1. Port Forwarding on Your Router (Home Server)
#

Use when: You’re hosting from home and don’t want to use third-party services.

Steps:
#

  • Expose Docker container port:

    docker run -p 8080:80 myapp
  • Login to your router and forward port 8080 to your local machine IP (e.g., 192.168.1.10).

  • Get your public IP address: https://whatismyipaddress.com

  • Access from the internet:

    http://your-public-ip:8080

🔒 Note: Secure with HTTPS (use reverse proxy + SSL).


✅ 2. Use a Reverse Proxy (e.g., Nginx, Traefik) + Dynamic DNS
#

Use when: You want a domain name (e.g., myapp.ddns.net) and/or HTTPS.

Tools:
#

Setup:
#

  • Run reverse proxy in Docker (e.g., Nginx or Traefik).
  • Point DNS (e.g., yourname.duckdns.org) to your public IP.
  • Forward port 80 and 443 in your router to your Docker host.
  • Use Let’s Encrypt (via Certbot or Traefik) to enable HTTPS.

✅ 3. Cloud Hosting (VPS)
#

Use when: You want full control and a public IP.

Providers:
#

  • DigitalOcean, Linode, Vultr, Hetzner, AWS EC2, etc.

Steps:
#

  • Deploy your app to a VPS.

  • Expose Docker container port:

    docker run -p 80:80 myapp
  • Assign a domain (optional).

  • Secure with HTTPS (e.g., Nginx + Certbot).


✅ 4. Use Ngrok
#

Use when: You want a quick test link without setting up port forwarding or domains.

Steps:
#

  1. Install Ngrok:

    ./ngrok http 8080
  2. Tunnel to your app:

    docker run -p 8080:80 myapp
    ./ngrok http 8080
  3. Get a public URL like:

    https://randomname.ngrok.io

🟡 Free version has limits; great for testing and demos.


✅ 5. Tailscale or Zerotier (Private Mesh VPN)
#

Use when: You want access from anywhere, but privately and securely.

Steps:
#

  • Install Tailscale on your Docker host and your client devices.

  • You can access your app via internal VPN IP like:

    http://100.x.y.z:8080

🟢 Good for dev teams or secure internal tools.


✅ 6. Cloudflare Tunnel (Argo Tunnel)
#

Use when: You want a free, secure tunnel to a custom domain without port forwarding.

Steps:
#

  • Install cloudflared on host:

    cloudflared tunnel --url http://localhost:8080
  • Setup DNS in Cloudflare to use your tunnel.

  • No need to expose ports to the internet.

🛡️ Built-in DDoS protection and HTTPS.


✅ 7. Use a PaaS (Platform as a Service)
#

Use when: You want zero server management.

Examples:
#

You push your Docker image or repo, and they give you a public HTTPS link.


✅ 8. Reverse SSH Tunnel (with VPS)
#

Use when: Your host is behind strict NAT or firewall.

Steps:
#

  1. On your home machine:

    ssh -R 8080:localhost:8080 user@your-vps.com
  2. The app becomes available via:

    http://your-vps.com:8080

🛠 Requires a VPS and SSH access.


✅ 9. Expose via Kubernetes Ingress (Advanced)
#

Use when: You’re deploying via Kubernetes and want public access.

  • Use Ingress + LoadBalancer or NodePort
  • Manage routing with Nginx or Traefik Ingress Controllers
  • Configure external DNS + HTTPS

Summary Table:
#

MethodBest ForNeeds Public IP?HTTPSCustom DomainPersistent
Port ForwardingHome self-hosting❌/✅❌/✅
Reverse Proxy + DDNSSecure home setup
VPS HostingProduction apps
NgrokQuick testing❌/✅❌ (Free)
Tailscale / ZerotierPrivate remote access
Cloudflare TunnelNo port forwarding, secure
PaaS (Render, Railway)Zero setup, simple deployment
Reverse SSH TunnelNAT bypass or remote dev
Kubernetes IngressLarge-scale / production

Youcef
Author
Youcef
My name is youcef and i’m linux user who fool in love with linux , like free and open software .