Konteynerdagi barcha jarayonlar, agar siz uni maxsus tarzda ko'rsatmasangiz, ildiz foydalanuvchisi sifatida ishlaydi. Bu juda qulay ko'rinadi, chunki bu foydalanuvchi hech qanday cheklovlarga ega emas. Shuning uchun ildiz sifatida ishlash xavfsizlik nuqtai nazaridan noto'g'ri. Agar aqli raso hech kim mahalliy kompyuterda ildiz huquqlari bilan ishlamasa, ko'pchilik konteynerlarda ildiz ostidagi jarayonlarni boshqaradi.
Zararli dasturlarning konteynerdan qochib, asosiy kompyuterga kirishiga imkon beradigan xatolar har doim mavjud. Eng yomoni deb hisoblasak, konteyner ichidagi jarayonlar xost mashinasida hech qanday huquqqa ega bo'lmagan foydalanuvchi tomonidan boshqarilishini ta'minlashimiz kerak.
Foydalanuvchi yaratish
Konteynerda foydalanuvchi yaratish uni Linux distributivlarida yaratishdan farq qilmaydi. Biroq, buyruqlar turli xil asosiy tasvirlar uchun farq qilishi mumkin.
Debian-ga asoslangan tarqatish uchun siz Dockerfile-ga quyidagilarni qo'shishingiz kerak:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home node
Alp tog'lari uchun:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Foydalanuvchi tomonidan bajariladigan jarayonlar
UID 2000 foydalanuvchi sifatida keyingi barcha jarayonlarni ishga tushirish uchun quyidagilarni bajaring:
USER 2000
Barcha keyingi jarayonlarni tugun foydalanuvchisi sifatida ishga tushirish uchun quyidagilarni bajaring:
USER node
Batafsil
O'rnatish hajmlari
Jildlarni konteyner ichiga o'rnatayotganda foydalanuvchiga fayllarni o'qish va/yoki yozish imkoniyatini taqdim eting. Buning uchun konteynerdagi foydalanuvchi va konteynerdan tashqari faylga kirish uchun tegishli ruxsatlarga ega foydalanuvchining UID (GID) mos kelishi kerak. Bunday holda, foydalanuvchi nomlari muhim emas.
Ko'pincha Linux kompyuterida foydalanuvchining UID va GID 1000 ga teng. Bu identifikatorlar kompyuterning birinchi foydalanuvchisiga tayinlanadi.
Identifikatorlaringizni topish oson:
id
Siz foydalanuvchi haqida to'liq ma'lumot olasiz.
Misollardagi 2000 raqamini identifikatoringiz bilan almashtiring va hammasi yaxshi bo'ladi.
Foydalanuvchiga UID va GID belgilash
Agar foydalanuvchi avval yaratilgan bo'lsa, lekin siz identifikatorlarni o'zgartirishingiz kerak bo'lsa, buni shunday qilishingiz mumkin:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Agar siz alp tog'larining asosiy tasviridan foydalansangiz, soya paketini o'rnatishingiz kerak:
RUN apk add —no-cache shadow
Tasvirni yaratishda foydalanuvchi identifikatorini konteyner ichida o'tkazish
Agar sizning identifikatoringiz va loyihada ishlaydigan barcha odamlarning identifikatorlari mos kelsa, Dockerfile-da ushbu identifikatorni ko'rsating. Biroq, ko'pincha foydalanuvchi identifikatorlari mos kelmaydi.
O'zingiz xohlagan narsaga qanday erishish mumkinligi darhol aniq emas. Men uchun bu Dockerni o'zlashtirish jarayonida eng qiyin narsa edi. Ko'pgina docker foydalanuvchilari tasvir hayotida turli bosqichlar borligini tushunishmaydi. Birinchidan, rasm Dockerfile yordamida yig'iladi. Tasvirdan konteyner ishga tushirilganda, Dockerfile endi ishlatilmaydi.
Tasvir yaratilganda foydalanuvchi yaratilishi kerak. Xuddi shu narsa jarayonlar ishga tushiriladigan foydalanuvchini aniqlash uchun ham amal qiladi. Bu shuni anglatadiki, biz qandaydir tarzda konteyner ichida UID (GID) ni o'tkazishimiz kerak.
Direktivlar Dockerfile faylida tashqi o'zgaruvchilardan foydalanish uchun ishlatiladi
Docker fayli
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Argumentlarni docker-compose orqali quyidagicha yuborishingiz mumkin:
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
PS Docker-ning barcha nozik tomonlarini o'zlashtirish uchun hujjatlar yoki maqolalarni o'qish etarli emas. Siz ko'p mashq qilishingiz kerak, Dockerni his qilishingiz kerak.
Manba: www.habr.com