رفع مشکل دسترسی به سرویس درون کانتینر در داکر

فرض کنید که یک سرور ساده Node را در Docker راهاندازی کردهاید. با این حال، مشکل اصلی این است که سرور شما در کانتینر به درخواستهای ورودی پاسخ نمیدهد.
1. بررسی آی پی ای که روی آن لیسن می کنید
گاهی ممکن است که سرویس مورد نظر روی آی پی ای مانند '127.0.0.1'
شروع به کار کرده باشد. به این معنی که تنها به درخواستهایی که از داخل کانتینر ارسال میشوند، پاسخ میدهد. برای دسترسی از بیرون (میزبان)، سرور باید به آدرس '0.0.0.0'
گوش کند. این آدرس به معنای گوش دادن به تمامی اینترفیسها و آدرسهای IP است.
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n'+new Date);
}).listen(1337, '0.0.0.0');
2. تنظیم پورتها در Docker:
فراموش نکنید که در زمان اجرای کانتینر، پورتها به درستی مپ شوند. برای این کار در زمان اجرای کانتینر باید از ورودی -p 1337:1337
استفاده باشید تا پورت 1337 در کانتینر به پورت 1337 در میزبان متصل شود. همچنین، دستورات EXPOSE
در Dockerfile به عنوان متادیتا برای مستند کردن پورتهای مورد نیاز است، با این حال لازم است که از گزینه -p
هنگام اجرای کانتینر استفاده کنید.
3. تست از طریق IP کانتینر:
اگر دسترسی از localhost کار نمیکند، میتوانید از IP کانتینر برای آزمایش استفاده کنید. با اجرای دستور زیر میتوانید IP کانتینر را بدست آورید:
CID=$(docker run -p 1337:1337 -d node_server)
CIP=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID})
curl http://${CIP}:1337