یکی از مشکلاتی که در چند روز اخیر باهاش برخورد کردم، خطایی بود که پس از اجرای کانتینرها در داکر رخ میداد. زمانی که قصد متوقف کردن یک کانتینر در حال اجرا رو داشتم، متاسفانه دستور Docker container stop container-name جواب نمیداد و با خطای زیر مواجه میشد. 

Error response from daemon: cannot stop container: alp001: Cannot kill container 9153bd628a13a7fe552f3ffd25d46408d9c112c7c99c43dac0e9908e3b4535b4: unknown error after kill: docker-runc did not terminate sucessfully: container_linux.go:393: signaling init process caused “permission denied”
: unknown

البته راهکارهای متفاوتی برای رفع این مشکل تو اینترنت بود که شاید بخش عمده ای از اون دستورات هم اجرا شد ولی نهایتا خطا رفع نمیشد. از بکارگیری دستور در قالب sudo، ریستارت مجدد سرویس های داکر و کامپوز، یا حتی kill کردن کانتینر موردنظر که تمام موارد با مشکلاتی مواجه بود که منجر به عدم رفع مشکل می شد. در نهایت اجرای دستور sudo aa-remove-unknown مشکل رو رفع کرد. با کمی کنکاش روی این فرمان به ماژولی بنام apparmor برخورد کردم که شاید ریشه رفع این مشکل به این ماژول برمیگرده. خالی از لطف ندیدم راهکار اجرایی رفع مشکل متوقف نشدن کانتینرها در داکر (روی سیستم اوبونتو 18.4) رو به اشتراک بگذارم.

ماژول Apparmor:

این ماژول در حقیقت یک ماژول امنیتی لینوکس هست که از سیستم MAC یا کنترل دستیابی اجباری استفاده می کنه و با بکارگیری بهبودهای کرنل LSM، نرم افزارها و برنامه ها رو محدود به یک سری منابع تعیین شده میکنه. Appmore این روند رو با پروفایلهایی که در کرنل در هنگام راه اندازی سیستم لود شده اند انجام می دهد. Appmore بصورت پیش فرض نصب شده و فراخوانی می شود. این ماژول از پروفایلهای نرم افزار برای اینکه مشخص کند چه فایلها و مجوزهایی برای برنامه ها نیاز هست میتواند کنترل های خود را انجام دهد. پروفایلهای appmore دو مد اجرایی دارند:

مد Complaining/Learning: تخطی و تخلفات پروفایل مجاز هستند و لاگ می شوند. این مد برای تست و توسعه پروفایلهای جدید سودمند است

مد Enforced/Confined: تاکید و مجبور کردن سیاست های پروفایل و ثبت تخلفات در این حالت صورت می گیرد.

برای نصب پکیج پروفایل appmore میتوانید از دستور زیر کمک بگیرید.

sudo apt install apparmor-profiles

منبع منبع2

فرستادن دیدگاه


حامیان