Skip to main content

سوالات متداول

با مطالعه سوالات و پاسخ‌های موجود در این صفحه، بخشی از سوالات شما در جهت مشکلات پیش آمده طی استفاده از خدمات هم‌روش پاسخ داده می‌شود.

بعد از دیپلوی موفق، در اتصال به سرویس خود با timeout مواجه می‌شوم. مشکل از چیست؟#

مطمئن شوید که سرویس شما به جای 127.0.0.1 روی 0.0.0.0 درحال دریافت request باشد. اگر سرویس قرار است ترافیک خارج از host را نیز دریافت کند، باید روی 0.0.0.0 در حال listen کردن باشد زیرا در این صورت، علاوه‌بر127.0.0.1، ترافیک مربوط به دیگر network adapter های موجود در host را نیز دریافت خواهد کرد. همچنین مطمئن شوید که پورتی که برنامه/پردازه‌ی کانتینری شده روی آن اجرا می‌شود، به درستی ست شده باشد.

چگونه مشکل pull کردن image های رسمی Docker Hub را حل کنم؟#

اگر image مورد نظر عضوی از مجموعه image های رسمی Docker Hub (با پیش‌وند library) است، ممکن است لازم باشد این پیش‌وند را به دستور خود اضافه کنید. در حالت عادی و در غیاب این پیش‌وند، Docker Hub آن را به request اضافه می‌کند. با توجه به محدودیت اخیر Docker Hub روی حد نرخ درخواست برای manifest ها، مکانیسمی در زیرساخت هم‌روش برای مدیریت این امر پیاده‌سازی شده که ممکن است به خاطر آن، استفاده از پیش‌وند library ضروری باشد. به عنوان مثال، ممکن است 'docker pull python' با موفقیت انجام نشده و نیاز به استفاده از 'docker pull library/python' باشد.

چگونه می‌توانم به سرویس‌هایم در داخل کلاستر هم‌روش متصل شوم؟#

اگر سرویس های مبدا و مقصد هر دو در یک کلاستر هم‌روش هستند، می‌توانید با آدرس SVC_NAME.NS.svc به مقصد متصل شوید که در‌ آن NS نام namespace و SVC_NAME نام service مقصد است. اگر سرویس مقصد را با دارکوب دیپلوی کرده‌اید، SVC_NAME همان نام اپ است. اگر به کلاستر دسترسی دارید، می‌توانید با دستور kubectl get svc -n NS مقدار آن را پیدا کنید. در غیر این صورت، تیکت ثبت کنید.

برای اپها/پادهای دیسک‌دار به مشکل permissions برخورد می‌کنم و برنامه دسترسی به پوشه‌ی مربوطه ندارد. مشکل از چیست؟#

در صورتی که کانتینرِ اپ/پاد شما با userای غیر از root اجرا شود (که در بسیاری از ایمیجهای رایج به دلایل امنیتی مشاهده می‌شود) دسترسی (خواندن/نوشتن) در پوشه‌ای که دیسک به آن الصاق شده است را ندارد. برای بررسی وجود این مسئله می‌توانید به مستندات خود ایمیج مراجعه کنید یا داخل کانتینر (پس از exec) دستور id را بزنید. برای رفع این مشکل می‌توان به چند طریق عمل کرد.

راه اول استفاده از ایمیجی دیگر، که با یوزر root اجرا می‌شود (مثلا alpine)، به عنوان initcontainer است. در این حالت initcontainerای که دسترسی به دیسک هم دارد، در دستور اجرایی‌اش عملیات chown بر روی پوشه‌ی دیسک را انجام ‌می‌دهد. برای این کار باید user_id و group_idای که پردازه کانتینر اصلی با آن اجرا می‌شود را پیدا کنیم و در دستور زیر وارد کنیم:

chown -R UID:GID /DISK_MOUNT_POINT

راه دیگر استفاده از مفهوم fsGroup در قسمت securityContext مانیفست پاد هست. برای اطلاعات بیشتر به صفحه‌ی توضیحات secrurity context کوبرنتیز مراجعه کنید.

راه دیگر این است که ایمیج اپ/پاد را موقتا به ایمیجی دیگر (مثلا alpine) تغییر دهیم و از طریق تنظیم دستور اجرایی (یا با exec کردن در کانتینرش) دسترسی پوشه‌ی دیسک را (مشابه حالت initcontainerای‌) اصلاح کنیم و سپس با ویرایش مجدد، آدرس ایمیج را به ایمیج اصلی بازگردانیم.

چرا نباید از تگ latest برای انتخاب ایمیجهای داکر استفاده کنیم؟#

تگ latest در گذر زمان و با افزایش نسخه، همواره به یک نسخه‌ خاص و ثابت از ایمیج اشاره نمی‌کند. در صورت وجود تغییرات backward incompatible در نسخه‌ی جدید و دریافت و اجرای مجدد ایمیج latest (به هر دلیلی) مشکلاتی در اجرای برنامه به وجود خواهد آمد. همچنین استفاده از تگ latest عملیات rollback و مشاهده‌ی تاریخچه‌ی تغییرات را سخت می‌کند. توصیه می‌شود که برای انتخاب تگ ایمیج یا از تگ دقیق (مثلا 1.2.3 یا digest) استفاده کنیم و یا در صورت پشتیبانی (عملی!) برنامه از Semantic Versioning از قسمت Major.Minor (مثلا 1.2) به عنوان تگ استفاده کنیم. تا قسمت سوم (قسمت patch)، که بعضا patch های امنیتی در آنها اعمال می‌شوند و حتما با نسخه‌ی minor سازگار هستند، به شکل خودبه‌خود (در صورت دریافت و اجرای مجدد ایمیج) اعمال شوند.

چرابیلدهای من ناموفق می‌شوند؟#

در برخی از مواقع به خاطر مشکلات شبکه و مولفه‌های زیرساختی ممکن است که بیلدی ناموفق شود. در این موارد با retry بیلد ممکن است مشکل برطرف شد. همچنین محدودیت حافظه‌ی بیلد در دارکوب ۱ گیگابایت هست و در صورتی که پردازه‌ی بیلد به این محدودیت برخورد کند، ممکن است killed شود. مثلا برای بیلدهای nodejs با ست کردن متغیر NODE_OPTIONS می‌توان این محدودیت رم را به پردازه فهماند. در صفحه‌ی ساخت اپ ری‌اکت نحوه‌ی ست شدن این متغیر توضیح داده شده است.

چرا دیتای ذخیره‌شده در اپ پاک شده‌اند؟#

فایل سیستم ذخیره‌ی فایلها در کانتینرها ماندگار (persistent) نیست و در صورت ریست کانتینر، داده‌هایی که در خود داکر ایمیج نیستند،‌ پاک می‌شوند. برای ماندگاری داده‌ها باید از ویژگی دیسک در دارکوب استفاده شود. در این صورت داده‌های موجود در همان پوشه‌ی خاصی که دیسک روی آن mount شده بود، ماندگار خواهند شد. این ویژگی مخصوصا در استفاده از اپهای دیتابیسی اهمیت بیشتری پیدا می‌کند.

چرا حساب کاربری من تعلیق شده است؟#

در صورتی که از بستر دارکوب برای انجام فیشینگ استفاده نمایید یا ابزارهای امنیتی علیه سرویس‌های دیگران اجرا نمایید حساب شما تعلیق خواهد شد.