<?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: Prajwal P</title>
    <description>The latest articles on DEV Community by Prajwal P (@prajwal_p_2e173d7f975133a).</description>
    <link>https://dev.to/prajwal_p_2e173d7f975133a</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%2F3679210%2Feb66c568-5aa4-4e9c-93ce-8191fad95f50.jpg</url>
      <title>DEV Community: Prajwal P</title>
      <link>https://dev.to/prajwal_p_2e173d7f975133a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prajwal_p_2e173d7f975133a"/>
    <language>en</language>
    <item>
      <title># 🚀 From “Why is nothing working?” to “Now I Understand Everything” — My Docker Compose + MongoDB + Volume Learning Journey</title>
      <dc:creator>Prajwal P</dc:creator>
      <pubDate>Tue, 14 Apr 2026 12:53:58 +0000</pubDate>
      <link>https://dev.to/prajwal_p_2e173d7f975133a/-from-why-is-nothing-working-to-now-i-understand-everything-my-docker-compose-mongodb--3hkf</link>
      <guid>https://dev.to/prajwal_p_2e173d7f975133a/-from-why-is-nothing-working-to-now-i-understand-everything-my-docker-compose-mongodb--3hkf</guid>
      <description>&lt;p&gt;``## 📌 Introduction&lt;/p&gt;

&lt;p&gt;This is not just a blog.&lt;/p&gt;

&lt;p&gt;This is a &lt;strong&gt;complete journey&lt;/strong&gt; of how I:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployed a multi-container application on EC2&lt;/li&gt;
&lt;li&gt;Debugged Docker networking issues&lt;/li&gt;
&lt;li&gt;Fixed backend and frontend problems&lt;/li&gt;
&lt;li&gt;Understood MongoDB behavior&lt;/li&gt;
&lt;li&gt;And finally learned &lt;strong&gt;Docker volumes deeply&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I didn’t learn this from theory.&lt;/p&gt;

&lt;p&gt;I learned it by:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`text id="k5l1tt"&lt;br&gt;
breaking things → debugging → understanding → fixing&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ Project Architecture
&lt;/h2&gt;

&lt;p&gt;My setup had 3 containers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Node.js App (Frontend + Backend)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MongoDB Database&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mongo Express (DB UI)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All managed using Docker Compose.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Step 1: Initial Setup
&lt;/h2&gt;

&lt;p&gt;I ran:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`id="g3f8t0"&lt;br&gt;
docker compose up -d&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Everything started successfully.&lt;/p&gt;

&lt;p&gt;When I opened:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`id="v34txs"&lt;br&gt;
http://&amp;lt;EC2-IP&amp;gt;:3000&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 UI loaded&lt;br&gt;
👉 But no data was showing from MongoDB ❌&lt;/p&gt;




&lt;h2&gt;
  
  
  ❗ Problem 1: No Data in UI
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`text id="x0k3qv"&lt;br&gt;
Data from MongoDB:&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 Empty&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 Debugging Step 1: Browser Network Tab
&lt;/h2&gt;

&lt;p&gt;I checked DevTools → Network&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`id="zk6v0l"&lt;br&gt;
/fetch-data → FAILED ❌&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ❗ Problem 2: Wrong API URL
&lt;/h2&gt;

&lt;p&gt;Frontend code:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`id="s2o64r"&lt;br&gt;
fetch("http://localhost:3000/fetch-data")&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 Wrong ❌&lt;/p&gt;

&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Browser → localhost = my laptop&lt;/li&gt;
&lt;li&gt;App → running on EC2&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ Fix 1: Use Relative Path
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`id="kz8yqf"&lt;br&gt;
fetch("/fetch-data")&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 Debugging Step 2: API Response
&lt;/h2&gt;

&lt;p&gt;Now API returned:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`id="r1w9cz"&lt;br&gt;
200 OK&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But response:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`id="2l6c9c"&lt;br&gt;
{}&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ❗ Problem 3: MongoDB Empty
&lt;/h2&gt;

&lt;p&gt;I checked MongoDB:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`id="s1vxz1"&lt;br&gt;
show dbs&lt;br&gt;
use my-db&lt;br&gt;
show collections&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 No collections ❌&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Fix 2: Insert Data
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`id="7x6pkn"&lt;br&gt;
db.my-collection.insertOne({&lt;br&gt;
  data: "some dynamic data loaded from DB"&lt;br&gt;
})&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 Debugging Step 3: Still Not Working
&lt;/h2&gt;

&lt;p&gt;Even after inserting data:&lt;br&gt;
👉 UI still empty ❌&lt;/p&gt;




&lt;h2&gt;
  
  
  ❗ Problem 4: Backend Not Fetching Data
&lt;/h2&gt;

&lt;p&gt;Backend was not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selecting DB properly&lt;/li&gt;
&lt;li&gt;Querying collection&lt;/li&gt;
&lt;li&gt;Returning response&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ Fix 3: Backend Logic
&lt;/h2&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;js id="v9u5ah"&lt;br&gt;
const db = client.db("my-db");&lt;/p&gt;

&lt;p&gt;db.collection("my-collection").findOne({}, function (err, result) {&lt;br&gt;
  res.json({&lt;br&gt;
    data: result.data&lt;br&gt;
  });&lt;br&gt;
});&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 Debugging Step 4: Still Empty UI
&lt;/h2&gt;

&lt;p&gt;Now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API working ✅&lt;/li&gt;
&lt;li&gt;DB has data ✅&lt;/li&gt;
&lt;li&gt;Backend correct ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 UI still empty ❌&lt;/p&gt;




&lt;h2&gt;
  
  
  ❗ Problem 5: Frontend Bug
&lt;/h2&gt;

&lt;p&gt;Mistake:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`id="n3x7ml"&lt;br&gt;
fetch('/fetch-data');&lt;br&gt;
const jsonResponse = await response.json();&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 response undefined ❌&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Fix 4: Correct Fetch
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`js id="9z1qj8"&lt;br&gt;
const response = await fetch('/fetch-data');&lt;br&gt;
const jsonResponse = await response.json();&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ❗ Problem 6: DOM Not Loaded
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`id="3u7q3x"&lt;br&gt;
document.getElementById('dynamic')&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 ran too early ❌&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Fix 5: window.onload
&lt;/h2&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;js id="y5u2p0"&lt;br&gt;
window.onload = async function () {&lt;br&gt;
  const response = await fetch('/fetch-data');&lt;br&gt;
  const jsonResponse = await response.json();&lt;/p&gt;

&lt;p&gt;document.getElementById('dynamic').textContent = jsonResponse.data;&lt;br&gt;
};&lt;br&gt;
&lt;code&gt;&lt;/code&gt;`&lt;/p&gt;




&lt;h2&gt;
  
  
  ❗ Problem 7: Container Not Updating
&lt;/h2&gt;

&lt;p&gt;Changes not reflecting ❌&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Fix 6: Rebuild + Recreate
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`id="0j6yxn"&lt;br&gt;
docker compose down&lt;br&gt;
docker compose up --build --force-recreate -d&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎉 Final Result
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`id="l8m1n7"&lt;br&gt;
Data from MongoDB: some dynamic data loaded from DB&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  💾 The Biggest Learning — Docker Volumes
&lt;/h1&gt;

&lt;p&gt;After everything worked, I discovered a critical issue.&lt;/p&gt;

&lt;p&gt;When I ran:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`id="w5n6t2"&lt;br&gt;
docker compose down -v&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 My database data was gone 💥&lt;/p&gt;




&lt;h2&gt;
  
  
  ❗ Why Data Was Lost
&lt;/h2&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Containers are temporary&lt;/li&gt;
&lt;li&gt;Data inside container is NOT persistent&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔥 What Is a Docker Volume?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;A Docker volume is persistent storage mounted directly into a container.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧠 My Initial Wrong Thinking
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“Volume is just a link”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;❌ WRONG&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Correct Understanding
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Volume is directly mounted into container&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  📦 MongoDB Data Path
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`id="d7n9rs"&lt;br&gt;
/data/db&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 What Docker Does
&lt;/h2&gt;

&lt;p&gt;`&lt;code&gt;&lt;/code&gt;yaml id="3c5y7a"&lt;br&gt;
volumes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mongo-data:/data/db
&lt;code&gt;&lt;/code&gt;`&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Docker:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;`text id="9n4qkz"&lt;br&gt;
mounts volume → /data/db&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 Visual Flow
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`id="y0h4b8"&lt;br&gt;
[ Container ]&lt;br&gt;
     │&lt;br&gt;
     ▼&lt;br&gt;
 /data/db&lt;br&gt;
     │&lt;br&gt;
     ▼&lt;br&gt;
[ Docker Volume ]&lt;br&gt;
     │&lt;br&gt;
     ▼&lt;br&gt;
[ Host Storage ]&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔁 What Happens on Recreate
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`id="5v1q6k"&lt;br&gt;
docker compose down&lt;br&gt;
docker compose up&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Container deleted ❌&lt;/li&gt;
&lt;li&gt;Volume remains ✅&lt;/li&gt;
&lt;li&gt;New container created ✅&lt;/li&gt;
&lt;li&gt;Volume mounted again ✅&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;👉 MongoDB reads existing data ✅&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Real-world Analogy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Container = Laptop 💻&lt;/li&gt;
&lt;li&gt;Volume = External Hard Disk 💾&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚠️ Critical Command
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`id="3m9q8x"&lt;br&gt;
docker compose down -v&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 Deletes volume ❌&lt;br&gt;
👉 Deletes data 💥&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Safe Command
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;`id="n8k2z7"&lt;br&gt;
docker compose down&lt;br&gt;
`&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 Keeps data ✅&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Final Understanding
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Container = temporary&lt;/li&gt;
&lt;li&gt;Volume = persistent&lt;/li&gt;
&lt;li&gt;Data lives in volume&lt;/li&gt;
&lt;li&gt;Container just uses it&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎯 Final DevOps Insight
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“Containers are ephemeral, but data must be persistent. Docker volumes ensure data survives container lifecycle.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🚀 What I Learned
&lt;/h2&gt;

&lt;p&gt;This project taught me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker Compose networking&lt;/li&gt;
&lt;li&gt;Service name vs localhost&lt;/li&gt;
&lt;li&gt;EC2 deployment&lt;/li&gt;
&lt;li&gt;MongoDB authentication&lt;/li&gt;
&lt;li&gt;Backend API debugging&lt;/li&gt;
&lt;li&gt;Frontend async handling&lt;/li&gt;
&lt;li&gt;Docker rebuild vs recreate&lt;/li&gt;
&lt;li&gt;Docker volumes (most important 🔥)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Interview Answer
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“I deployed a multi-container app using Docker Compose on EC2, debugged networking and application issues, and implemented Docker volumes to ensure persistent database storage across container restarts.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  📢 Connect with me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn: &lt;a href="https://www.linkedin.com/in/prajwalputtaraju/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/prajwalputtaraju/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/Prajwal8651" rel="noopener noreferrer"&gt;https://github.com/Prajwal8651&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Docker #DockerCompose #DockerVolumes #DevOps #MongoDB #AWS #NodeJS #Debugging #LearningByDoing #30DaysofAWSTerraform
&lt;/h1&gt;

</description>
      <category>docker</category>
      <category>mongodb</category>
      <category>node</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
