<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mercy Chelangat</title>
    <description>The latest articles on DEV Community by Mercy Chelangat (@mercy_dev_8778).</description>
    <link>https://dev.to/mercy_dev_8778</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3929066%2F07c7e8b4-b0c6-489c-9bd3-1eef065e6bc1.jpg</url>
      <title>DEV Community: Mercy Chelangat</title>
      <link>https://dev.to/mercy_dev_8778</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mercy_dev_8778"/>
    <language>en</language>
    <item>
      <title>How to Expose Your Docker App Securely with Cloudflare Tunnel and a Custom Domain</title>
      <dc:creator>Mercy Chelangat</dc:creator>
      <pubDate>Fri, 15 May 2026 12:38:59 +0000</pubDate>
      <link>https://dev.to/mercy_dev_8778/how-to-expose-your-docker-app-securely-with-cloudflare-tunnel-and-a-custom-domain-1fbg</link>
      <guid>https://dev.to/mercy_dev_8778/how-to-expose-your-docker-app-securely-with-cloudflare-tunnel-and-a-custom-domain-1fbg</guid>
      <description>&lt;p&gt;Every time you forward a port on your router, you crack open a door to the internet. Anyone scanning your IP can knock on it, and some will.&lt;/p&gt;

&lt;p&gt;There is a better way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloudflare Tunnel&lt;/strong&gt; &lt;em&gt;creates a secure, outbound-only connection between your local server and Cloudflare's edge network. No open ports. No static IP. No firewall rules. Your app becomes reachable at your custom domain, fully encrypted, completely free.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I recently migrated to a new domain and used this exact setup to get my Dockerized React + Django + Nginx stack live in under an hour. This guide walks you through every step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;By the end, your app will be live at your domain with zero exposed ports and zero cost.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foth20srp1jv5uk4krpcq.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foth20srp1jv5uk4krpcq.webp" alt="Cloudflare Tunnel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A Cloudflare account (free)&lt;/li&gt;
&lt;li&gt;A domain added to Cloudflare (nameservers pointed to Cloudflare)&lt;/li&gt;
&lt;li&gt;Your application running inside Docker&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cloudflared&lt;/code&gt; service running in Docker&lt;/li&gt;
&lt;li&gt;Basic terminal knowledge&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Add Your Domain to Cloudflare
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Log in to Cloudflare and click &lt;strong&gt;Add domain&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enter your domain &amp;gt; select the &lt;strong&gt;Free plan&lt;/strong&gt; &amp;gt; click &lt;strong&gt;Continue&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Cloudflare scans for existing DNS records. Review, remove irrelevant ones, and continue&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Update nameservers at your registrar:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cloudflare gives you two nameservers, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;xyz.ns.cloudflare.com
abc.ns.cloudflare.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Go to your domain registrar (wherever you bought your domain), find DNS/Nameserver settings, and replace the current nameservers with these two. Wait for Cloudflare to confirm the domain is &lt;strong&gt;Active&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: DNS Records
&lt;/h2&gt;

&lt;p&gt;Since you are using Cloudflare Tunnel (&lt;code&gt;cloudflared&lt;/code&gt;), you &lt;strong&gt;do NOT need A records&lt;/strong&gt; pointing to your server IP. The tunnel handles all routing. CNAME records are created automatically in Step 7.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Install &lt;code&gt;cloudflared&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add Cloudflare's package signing key&lt;/span&gt;
&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0755 /usr/share/keyrings
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://pkg.cloudflare.com/cloudflare-main.gpg | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /usr/share/keyrings/cloudflare-main.gpg &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null

&lt;span class="c"&gt;# Add Cloudflare's apt repo&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/cloudflared.list

&lt;span class="c"&gt;# Update and install&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;cloudflared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Authenticate cloudflared
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prints a URL. Open it in your browser, select your domain, and a &lt;code&gt;cert.pem&lt;/code&gt; file is saved to &lt;code&gt;~/.cloudflared/cert.pem&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This cert is your account-level credential. Keep it safe. It is only needed on the host for management commands, not inside your Docker container.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 5: Create the Tunnel
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel create tunnel-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Created tunnel tunnel-name with id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Tunnel credentials written to ~/.cloudflared/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the tunnel UUID, you need it in the next step.&lt;/p&gt;

&lt;p&gt;Copy the credentials to your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; ~/.cloudflared/&lt;span class="k"&gt;*&lt;/span&gt;.json .cloudflared/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: Create the Configuration File
&lt;/h2&gt;

&lt;p&gt;Inside your &lt;code&gt;.cloudflared&lt;/code&gt; directory, create a &lt;code&gt;config.yml&lt;/code&gt; file. This file tells the tunnel which local service to route traffic to for each hostname.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;tunnel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;YOUR-TUNNEL-UUID&amp;gt;&lt;/span&gt;
&lt;span class="na"&gt;credentials-file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/etc/cloudflared/&amp;lt;YOUR-TUNNEL-UUID&amp;gt;.json&lt;/span&gt;

&lt;span class="na"&gt;ingress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="c1"&gt;# Route your primary domain to Nginx on port 443&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;example.com&lt;/span&gt;
    &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://nginx:443&lt;/span&gt;

  &lt;span class="c1"&gt;# Route www subdomain to the same service&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;www.example.com&lt;/span&gt;
    &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://nginx:443&lt;/span&gt;

  &lt;span class="c1"&gt;# Catch-all rule. required, must be last&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http_status:404&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a full list of configuration options, type this command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel &lt;span class="nb"&gt;help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Not using Nginx? Replace &lt;code&gt;https://nginx:443&lt;/code&gt; with &lt;code&gt;http://localhost:8000&lt;/code&gt; (or your app's port). The catch-all rule is &lt;strong&gt;required&lt;/strong&gt;, &lt;code&gt;cloudflared&lt;/code&gt; throws an error without it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Validate your rules:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel &lt;span class="nt"&gt;--config&lt;/span&gt; .cloudflared/config.yml ingress validate
&lt;span class="c"&gt;# Expected: OK&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 7: Route Traffic to Your Domain
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Point root domain to the tunnel (auto-creates CNAME in Cloudflare DNS)&lt;/span&gt;
cloudflared tunnel route dns tunnel-name example.com

&lt;span class="c"&gt;# Point www subdomain&lt;/span&gt;
cloudflared tunnel route dns tunnel-name www.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm in the Cloudflare dashboard under &lt;strong&gt;DNS &amp;gt; Records&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Type    Name    Content                          Proxy
CNAME   @       &amp;lt;tunnel-uuid&amp;gt;.cfargotunnel.com   Proxied
CNAME   www     &amp;lt;tunnel-uuid&amp;gt;.cfargotunnel.com   Proxied
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test routing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel &lt;span class="nt"&gt;--config&lt;/span&gt; .cloudflared/config.yml ingress rule https://example.com
&lt;span class="c"&gt;# Expected: Matched rule #0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 8: Add &lt;code&gt;cloudflared&lt;/code&gt; to docker-compose.yml
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;cloudflared&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cloudflare/cloudflared&lt;/span&gt;
  &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
  &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tunnel --config /etc/cloudflared/config.yml run&lt;/span&gt;
  &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nonroot"&lt;/span&gt;
  &lt;span class="na"&gt;dns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;1.1.1.1&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;1.0.0.1&lt;/span&gt;
  &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./.cloudflared:/etc/cloudflared&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 9: Set File Permissions
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;nonroot&lt;/code&gt; user inside the container needs read access to the credentials:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;600 .cloudflared/&lt;span class="k"&gt;*&lt;/span&gt;.json
&lt;span class="nb"&gt;chmod &lt;/span&gt;644 .cloudflared/config.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; If the container still can't read the JSON file after &lt;code&gt;600&lt;/code&gt;, try &lt;code&gt;644&lt;/code&gt;. This is a common issue depending on how Docker volume mounts are configured on your system.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 10: Start and Verify
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Start the container&lt;/span&gt;
docker compose up cloudflared &lt;span class="nt"&gt;-d&lt;/span&gt;

&lt;span class="c"&gt;# Watch the logs&lt;/span&gt;
docker compose logs cloudflared &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A healthy connection looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INF Registered tunnel connection connIndex=0 ...
INF Registered tunnel connection connIndex=1 ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check tunnel health in the Cloudflare dashboard under &lt;strong&gt;Access &amp;gt; Networks &amp;gt; Connectors&lt;/strong&gt;. Your tunnel should show a green &lt;strong&gt;Healthy&lt;/strong&gt; status.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Issues and How to Fix Them
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Tunnel shows "Degraded" or "Offline"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;cloudflared&lt;/code&gt; container cannot read the credentials file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt; .cloudflared/
&lt;span class="nb"&gt;chmod &lt;/span&gt;644 .cloudflared/&lt;span class="k"&gt;*&lt;/span&gt;.json
docker compose restart cloudflared
docker compose logs cloudflared &lt;span class="nt"&gt;-f&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. &lt;code&gt;ingress validate&lt;/code&gt; passes but traffic returns 404&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your catch-all rule is missing or misplaced. It must be last with no &lt;code&gt;hostname&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;ingress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;example.com&lt;/span&gt;
    &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://nginx:443&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http_status:404&lt;/span&gt;   &lt;span class="c1"&gt;# must be last, no hostname&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. &lt;code&gt;cert.pem&lt;/code&gt; errors after a long period&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The cert expires after inactivity. Re-run this to refresh it without affecting your tunnel or DNS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You now have a production-ready, zero-cost tunnel connecting your custom domain to a locally running Docker stack, no open ports, no exposed IPs, no monthly bill.&lt;/p&gt;

&lt;p&gt;This setup scales further than you might think. You can add more &lt;code&gt;hostname&lt;/code&gt; entries to expose multiple services through the same tunnel, set up Cloudflare Access policies to password-protect specific routes, or layer on Cloudflare's WAF and DDoS protection, all from the same free account.&lt;/p&gt;

&lt;p&gt;If something broke along the way, drop your error in the comments. And if everything worked, &lt;strong&gt;what are you running behind your tunnel?&lt;/strong&gt; I'd love to see what you're building.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/tunnel/" rel="noopener noreferrer"&gt;Official Cloudflare Tunnel Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/tunnel/advanced/local-management/" rel="noopener noreferrer"&gt;Locally-Managed Cloudflare Tunnel Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/tunnel/advanced/local-management/configuration-file/" rel="noopener noreferrer"&gt;Official Locally-Managed Cloudflare Tunnel Config docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.cloudflare.com/t/can-i-use-cloudflared-in-a-docker-compose-yml/407168/2" rel="noopener noreferrer"&gt;Cloudflared in Docker Compose&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>docker</category>
      <category>cloudflare</category>
      <category>devops</category>
      <category>selfhosted</category>
    </item>
  </channel>
</rss>
