ඩෙවලපර් කෙනෙක්ගේ ජීවිතයේ එකම වරදක් – ‘localhost’ යනු සෑම තැනකම එකම ය. නමුත් Docker කන්ටේනරයක් තුළ එය වෙනස් අර්ථයක් ගනී. මේකේ පසුබිමේ සිදුවූ තත්ත්වය, එය ගැලපීමට ගත් පියවර සහ ශ්රී ලංකාවේ තාක්ෂණික පරිසරයට ඇති වැදගත්කම ගැන මේ ලිපියෙන් කියමු.
මූලික සැකසුම
ලේඛකයාගේ පෞද්ගලික ව්යාපෘතිය TestFlow Agent තුළ තිදෙනක් සේවා ඇත: Mock API, පසුබිම් (backend) සේවාව, සහ React ඉදිරිපස (frontend). ‘Run Enrollment Flow’ බොත්තම ක්ලික් කිරීමෙන් පසුබිම් සේවාව Mock API වෙත HTTP අයදුම්පත් යවා, ලියාපදිංචිය සාර්ථකයි කියා පණිවුඩයක් ලබා දෙයි.
ලොකල් පරිසරයේ මේ ක්රියාව සෑම වරක්ම සාර්ථකව ක්රියා කළා. එතෙක් Docker Compose සමඟ එකම පදනමක් (docker compose up --build) තුළ සියලු සේවා එකට ඇරඹුන පසු, එකම බොත්තම පමණක් අසාර්ථක වුණා.
ගැටලුවේ හේතුව
Frontend එක backend එකට ඇමතුමක් කරන්නේ සාර්ථකව, backend එක Mock API වෙත ඇමතුමක් කරනවා. එම backend කේතයේ:
const baseUrl = 'http://localhost:4000';
ලෝකල් පරිසරයේ localhost කියන්නේ ඒම යන්ත්රයයි, ඒ නිසා Mock API සාර්ථකව සම්බන්ධ වුණා. නමුත් Docker කන්ටේනරය තුළ localhost යනු එම කන්ටේනරයම, එහි 4000 පෝට් එකේ කිසිදු සේවාවක් නොතිබුණා. ඒ නිසා backend එක තමමම අමතා “nothing” ලබා ගත්තා – classic “works on my machine” බග් එක.
විසඳුම
Docker Compose තුළ සේවා අතර සම්බන්ධතා සදහා සේවා නාමය භාවිතා කරයි. ලේඛකයා පරිසර විචල්යයක් (environment variable) එකතු කර, එය Docker Compose හි mock-api සේවා නාමයට සකසා, දැනටමත් localhost නියමිත අගයක් රඳවා ඇත.
backend/routes/analysisRoutes.js හි:
const baseUrl = process.env.MOCK_API_URL || 'http://localhost:4000';
docker‑compose.yml හි:
environment:
- MOCK_API_URL=http://mock‑api:4000
මෙම කෙටි වෙනස්කමෙන් Docker තුළ බොත්තම සාර්ථකව ක්රියා කර, ENR‑4C554E55 වැනි ලියාපදිංචි ID එකක් “ACTIVE” තත්ත්වය සමඟ ලබා ගත්තා.
ශ්රී ලංකාවට ඇති වැදගත්කම
• අධ්යයන අවස්ථා – සිසුන් Docker භාවිතා කරමින් මූලික “localhost” වැරදි වැළැක්වීමට හැකියාව ලැබේ.
• ඩෙවලපර් කුසලතා – සේවා නාම DNS, පරිසර විචල්ය භාවිතය, සහ Docker Compose හරහා මයික්රො‑සර්විස් සම්බන්ධතා ඉගෙන ගත හැක.
• ව්යාපාරික ලාභ – අලූත් තාක්ෂණික නිෂ්පාදන Docker තුළ නිවැරදිව පරික්ෂා කර, “it works locally but not in production” වැනි බග් වලින් වළක්වා, ද්රව්යමය කාලය හා වියදම් අඩු කරයි.
මෙම කථාව පෙනේ, “hard‑coded localhost” යනු කන්ටේනරීකරණයේදී පැනෙන බෝම්බයක්. ඒක සකස් කිරීමේදී පරිසර විචල්යයක් භාවිතා කර, දෙකම (ලොකල් සහ Docker) එකම කේතයෙහි ක්රියාත්මක කර ගැනීම ඉතා වැදගත්.
අවසන් වශයෙන්, Docker භාවිතයේ නවතම පරීක්ෂණයක් ලෙස, සේවා නාම DNS සහ පරිසර විචල්යයන්ගෙන් ගැටලු විසඳා ගැනීමට හැකි බව මේ උදාහරණය පෙන්වයි. ඔබේ මෘදුකාංගය Docker තුළ ගෙන යනවා නම්, localhost එකේ අඩුපාඩු පරීක්ෂා කරගන්න.