Alpine'ı temel görüntü olarak kullandığım zaman bir kullanıcıyı nasıl eklerim?


110

Ben kullanıyorum alpinebenim Dockerfile baz görüntüsü olarak (Alpine dayalı bir resmi veya). Bir kullanıcı oluşturmak için hangi talimatları eklemem gerekiyor?

Sonunda bu kullanıcıyı, kapsayıcıya yerleştireceğim uygulamayı çalıştırmak için kullanacağım, böylece kök kullanıcı bunu yapmaz.

Yanıtlar:


225

Alpine, komutunu adduserve addgroupkullanıcıları ve grupları oluşturmak için kullanır ( useraddve yerine 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

İçin bayraklar adduser:

Kullanım: adduser [SEÇENEKLER] KULLANICI [GRUP]

Yeni kullanıcı oluşturun veya USER’i GROUP’a ekleyin

        -h DIR Ana dizini
        -g GECOS GECOS alanı
        -s SHELL Giriş kabuğu
        -G GRP Grubu
        -S Bir sistem kullanıcısı oluşturun
        -D Parola atama
        -H Ana dizin oluşturmayın
        -u UID Kullanıcı kimliği
        -k SKEL İskelet dizini (/ etc / skel)

Yeni kullanıcı resmi belgeleri ekleyin


7
Veya alternatif olarak, yukarıdaki tüm parçacığı USER 405Alpine Linux içindeki konuk kullanıcı olan şunu kullanarak değiştirebilirsiniz .
Daniel Gartmann

8
Neden olmasın USER guest?
user672009

3
Linux'ta docker çalıştırırken herhangi bir izin sorunu olmaması için, bu kullanıcının ana işletim sistemindekiyle aynı UID / GID'ye sahip olmasını istediğim için yeni bir kullanıcı oluşturmaya giderdim. (macOS / Windows kullanıcıları ile ilgili bir sorun değil)
elquimista

5
Alp BusyBox dayalı olduğundan, onun bu Not adduserve addgroupkomutlar farklıdır adduserve addgroupDebian ve Ubuntu tarafından sağlanan sırayla ön uçları olan useraddve groupadd. Özellikle, Debian ve Ubuntu komutları yalnızca uzun biçim seçeneklerini destekler. Bakınız: manpages.debian.org/stretch/adduser/adduser.8.en.html
Jack

Zaten bir docker container oluşturdum, şimdi bir kullanıcı eklemek için hangi komutu çalıştırmam gerekiyor?
Aashish Kumar

68

Komutlar adduserve addgroup.

İşte meşgul kutu ortamlarında (alpine) ve Debian tabanlı ortamlarda (Ubuntu, vb.) Kullanabileceğiniz Docker için bir şablon:

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

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

Aşağıdakilere dikkat et:

  • --disabled-password şifre sorulmasını engeller
  • --gecos "" Debian tabanlı sistemlerde "Tam Ad" vb. istemini atlatır
  • --home "$(pwd)"kullanıcının evini WORKDIR olarak ayarlar. Bunu istemeyebilirsiniz.
  • --no-create-home bozukluğun dizine kopyalanmasını engeller /etc/skel

Bu uygulamaların kullanım açıklamasında , adduser ve addgroup için kodda bulunan uzun bayraklar eksik .

Aşağıdaki uzun biçimli bayraklar hem alpin hem de debian türevlerinde çalışmalıdır:

Kullanıcı Ekle

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

Unutulmaması gereken bir nokta, --ingroupayarlanmamışsa GID'nin UID ile eşleşecek şekilde atanacağıdır. Sağlanan UID'ye karşılık gelen GID zaten varsa, adduser başarısız olur.

grup ekle

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

Tüm bunları, kapsayıcıları UID / GID olarak çalıştırmak için fixuid projesine kendi alternatifimi yazmaya çalışırken keşfettim .

Giriş noktası yardımcı komut dosyam GitHub'da bulunabilir.

Amaç, Docker'ın ENTRYPOINTilgili bir bağlama bağlantısından UID ve GID'yi çıkarmasına neden olması gereken ilk argüman olarak bu betiğin başına eklemektir.

İzinlerin nereden çıkarılacağını belirlemek için bir ortam değişkeni "ŞABLON" gerekli olabilir.

(Yazarken betiğim için dokümantasyonum yok. Hala yapılacaklar listesinde !!)


12
+1, komut argümanları için uzun biçim kullanmak okunabilirliği artırır ve bakımı kolaylaştırır. Kabuk betikleri yazarken daima uzun biçimi kullanın (Dockerfile RUN , bir kabuk betiğinden başka bir şey değildir).
Victor Schröder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.