आधार छवि के रूप में अल्पाइन का उपयोग करने पर मैं एक उपयोगकर्ता कैसे जोड़ूं?


105

मैं alpineअपने डॉकरीफाइल में आधार छवि के रूप में (या अल्पाइन पर आधारित एक छवि) का उपयोग कर रहा हूं । उपयोगकर्ता बनाने के लिए मुझे किन निर्देशों को जोड़ने की आवश्यकता है?

आखिरकार मैं इस उपयोगकर्ता का उपयोग उस एप्लिकेशन को चलाने के लिए करूँगा, जिसे मैं कंटेनर में रखूँगा ताकि रूट उपयोगकर्ता न करे।

जवाबों:


218

अल्पाइन आदेश का उपयोग करता है adduserऔर addgroupउपयोगकर्ताओं और समूहों बनाने (बजाय के लिए useraddऔर usergroup)।

FROM alpine:latest

# Create a group and user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# Tell docker that all future commands should run as the appuser user
USER appuser

के लिए झंडे adduserहैं:

उपयोग: योजक [विकल्प] USER [ग्रुप]

नया उपयोगकर्ता बनाएं, या ग्रुप में USER जोड़ें

        -एच डीआईआर होम निर्देशिका
        -g GECOS GECOS फ़ील्ड
        -S SHELL लॉगिन शेल
        -जी जीआरपी ग्रुप
        -S एक प्रणाली उपयोगकर्ता बनाएँ
        -D एक पासवर्ड असाइन न करें
        -घर निर्देशिका का निर्माण न करें
        -यू यूआईडी यूजर आईडी
        -k SKEL कंकाल निर्देशिका (/ आदि / स्केल)

नए उपयोगकर्ता आधिकारिक डॉक्स जोड़ें


7
या वैकल्पिक रूप से, आप इसका उपयोग करके पूरे स्निपेट को बदल सकते हैं: USER 405जो अल्पाइन लिनक्स के भीतर अतिथि उपयोगकर्ता है।
डैनियल गार्टमैन

8
क्यों नहीं USER guest?
user672009

3
मैं एक नया उपयोगकर्ता बनाने के साथ जाऊंगा क्योंकि मैं चाहता हूं कि उस उपयोगकर्ता के पास होस्ट ओएस पर एक ही यूआईडी / जीआईडी ​​हो, ताकि लिनक्स में डॉक चलाने पर कोई अनुमति जारी न हो। (
macOS

5
ध्यान दें कि जब से अल्पाइन बिजीबॉक्स पर आधारित है, अपनी adduserऔर addgroupआदेशों से अलग हैं adduserऔर addgroupके रूप में Debian और Ubuntu द्वारा प्रदान की जो बारी में करने के लिए सामने समाप्त होता है कर रहे हैं useraddऔर groupadd। विशेष रूप से, डेबियन और उबंटू कमांड केवल लंबे फॉर्म विकल्पों का समर्थन करते हैं। देखें: manpages.debian.org/stretch/adduser/adduser.8.en.html
जैक

मैंने पहले ही एक डॉकटर कंटेनर बनाया है, अब मुझे उपयोगकर्ता को जोड़ने के लिए किस कमांड की आवश्यकता है?
आशीष कुमार

65

आदेशों हैं adduserऔर addgroup

यहां डॉकर के लिए एक टेम्प्लेट है जिसे आप व्यस्त वातावरण (अल्पाइन) के साथ-साथ डेबियन-आधारित वातावरण (उबंटू, आदि) में उपयोग कर सकते हैं:

ENV USER=docker
ENV UID=12345
ENV GID=23456

RUN adduser \
    --disabled-password \
    --gecos "" \
    --home "$(pwd)" \
    --ingroup "$USER" \
    --no-create-home \
    --uid "$UID" \
    "$USER"

निम्नलिखित पर ध्यान दें:

  • --disabled-password एक पासवर्ड के लिए संकेत रोकता है
  • --gecos "" डेबियन आधारित प्रणालियों पर "पूर्ण नाम" आदि के लिए संकेत देता है
  • --home "$(pwd)"उपयोगकर्ता के घर पर काम करता है। आप ऐसा नहीं चाह सकते हैं।
  • --no-create-home cruft को निर्देशिका में कॉपी होने से रोकता है /etc/skel

इन अनुप्रयोगों के लिए उपयोग वर्णन है लापता लंबे झंडे के लिए कोड में मौजूद adduser और addgroup

निम्नलिखित दीर्घ-रूप झंडे को अल्पाइन के साथ-साथ डेबियन-डेरिवेटिव दोनों में काम करना चाहिए:

उपयोगकर्ता जोड़ें

BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.

Usage: adduser [OPTIONS] USER [GROUP]

Create new user, or add USER to GROUP

        --home DIR           Home directory
        --gecos GECOS        GECOS field
        --shell SHELL        Login shell
        --ingroup GRP        Group (by name)
        --system             Create a system user
        --disabled-password  Don't assign a password
        --no-create-home     Don't create home directory
        --uid UID            User id

एक बात का ध्यान रखें कि यदि --ingroupसेट नहीं किया जाता है तो GID को UID से मिलान करने के लिए असाइन किया गया है। यदि प्रदान की गई UID के अनुरूप GID पहले से मौजूद है तो एड्यूसर विफल हो जाएगा।

समूह जोड़ें

BusyBox v1.28.4 (2018-05-30 10:45:57 UTC) multi-call binary.

Usage: addgroup [-g GID] [-S] [USER] GROUP

Add a group or add a user to a group

        --gid GID  Group id
        --system   Create a system group

मेजबान यूआईडी / जीआईडी ​​के रूप में कंटेनर चलाने के लिए फिक्सड प्रोजेक्ट के लिए अपना खुद का विकल्प लिखने की कोशिश करते हुए मैंने यह सब खोजा ।

GitHub पर मेरी प्रविष्टि की सहायक स्क्रिप्ट मिल सकती है।

अभिप्राय उस स्क्रिप्ट को पहले तर्क के रूप में ENTRYPOINTप्रस्तुत करना है, जिसके लिए डोकर को यूआईडी से संबंधित होना चाहिए और जीआईडी ​​को एक प्रासंगिक बिंदु से माउंट करना चाहिए।

एक पर्यावरण चर "TEMPLATE" को यह निर्धारित करने की आवश्यकता हो सकती है कि अनुमतियों को कहां से हटाया जाना चाहिए।

(लेखन के समय मेरे पास अपनी स्क्रिप्ट के लिए प्रलेखन नहीं है। यह अभी भी टूडू सूची में है !!)


11
+1, कमांड आर्ग्स के लिए लंबे फॉर्म का उपयोग करने से पठनीयता बढ़ जाती है और रखरखाव आसान हो जाता है। शेल स्क्रिप्ट लेखन हमेशा लंबे प्रपत्र का उपयोग करते हैं (Dockerfile भागो है एक खोल स्क्रिप्ट से और कुछ नहीं)।
विक्टर श्रोडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.