من تقریبا 3 ماه هست روی داکر به صورت حرفه ای دارم کار می کنم .
هر جا که پیچیده فکر کردم به مشکلاتی خوردم که راه حل خیلی ساده داشته و به دلیل این که به لاگ ها توجهی نکردم مجبور شدم ساعت ها بگردم و بعد به لاگ مراجعه کردم در عرض یکی دو ساعت مشکلاتم حل شده .
این یه مشکلی هست که داخل نت این عبارت سرچ کنید به مشکلات زیادی می خورید.
Nginx doesn't get host from embedded DNS in docker
این مشکل حالا چی هست بیشتر توضیح میدم شما وقتی روی داکر می خواید چند تا سرویس استفاده کنید یک راهی که ارتباط بین این هارو مدیریت کنید این هست که از یک nginx در لبه سرور به صورت proxy reverse استفاده کنید و کلیه درخواست ها را با شروطی که دارید به سرویس های مورد نظر خودتون پاس بدید .
تا اینجا مشکلی نیست شما وقتی از docker compose برای مدیریت سرویس ها استفاده می کنید می توانید از نام هایی که قرار میدید برای ارتباط داخلی بین این سرویس ها استفاده کنید .
مشکل از کجا شروع میشه nginx انگار پایه dns داخل IPv6 شروع به گشتن می کنه و DNS هارو درست دریافت نمی کنه باعث میشه شما در ارتباط nginx با این سرویس ها به اررور 502 bad gateway برخورد کنید .
اررور ها اصولا از این جنس هستن
2019/12/01 14:23:29 [error] 6#6: *4854 upstream timed out (110: Connection timed out) while reading response header from upstream, client:
خوب حالا باید چی کار کنیم باید چند تا کار انجام بشه بر روی سرور لینوکس dns خود داکر روی IP 127.0.0.11 تعریف شده است
باید فایل
/etc/resolv.conf
ویرایش کنید و
nameserver 127.0.0.11
به لیستشون اضافه کنید
همین طور دارید nginx کانفیگ می کنید این خط کد داخل http اضافه کنیدن
http {
resolver 127.0.0.11 ipv6=off valid=30s;
......
}
اون قسم valid:30s برای این هست که اگر مشکلی در دریافت بود هر 30 ثانیه یه بررسی مجدد انجام بده .
من زیاد nginx وارد نیستم دارم در موردش مطالعه می کنم اما با بررسی هایی که دارم انجام میدم اما کم کم داره به دوست خوبم تبدیل میشه ازش لذت میبرم و امکاناتی که میده .
امیدوارم مفید باشه.