Alpineをベースイメージとして使用している場合、ユーザーを追加するにはどうすればよいですか?


98

alpineDockerfileのベースイメージとして(またはAlpineに基づくイメージ)を使用しています。ユーザーを作成するには、どの指示を追加する必要がありますか?

最終的には、このユーザーを使用して、コンテナーに配置するアプリケーションを実行し、ルートユーザーが実行しないようにします。

回答:


206

アルパインは、コマンドを使用していますadduserし、addgroup(というよりも、ユーザーとグループを作成するためuseraddusergroup)。

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とおりです。

使用法:adduser [OPTIONS] USER [GROUP]

新しいユーザーを作成するか、USERをGROUPに追加します

        -h DIRホームディレクトリ
        -g GECOS GECOSフィールド
        -s SHELLログインシェル
        -G GRPグループ
        -Sシステムユーザーを作成します
        -Dパスワードを割り当てない
        -Hホームディレクトリを作成しません
        -u UIDユーザーID
        -k SKELスケルトンディレクトリ(/ etc / skel)

新しいユーザーの公式ドキュメントを追加


7
または、これを使用して上記のスニペット全体を置き換えることができます。USER 405これは、Alpine Linux内のゲストユーザーです。
Daniel Gartmann

8
なんでUSER guest
user672009 '26

3
Linuxでdockerを実行するときに権限の問題が発生しないように、そのユーザーにホストOSのものと同じUID / GIDを持たせたいので、新しいユーザーを作成します。(macOS / Windowsユーザーには問題ありません)
elquimista 2018年

5
アルパインは、BusyBoxのに基づいているので、そのことを注意adduserおよびaddgroupコマンドは異なっているadduseraddgroupのDebianとUbuntuによって提供される順番での先端であるuseraddとはgroupadd。特に、DebianおよびUbuntuコマンドは、長い形式のオプションのみをサポートします。参照:manpages.debian.org/stretch/adduser/adduser.8.en.html
Jack

すでにDockerコンテナーを作成していますが、ユーザーを追加するにはどのコマンドを実行する必要がありますか?
Aashish Kumar

63

コマンドはadduserおよびaddgroupです。

これは、busybox環境(高山)とDebianベースの環境(Ubuntuなど)で使用できるDockerのテンプレートです。

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 "" Debianベースのシステムでの「フルネーム」などのプロンプトを回避します
  • --home "$(pwd)"ユーザーのホームをWORKDIRに設定します。あなたはこれを望まないかもしれません。
  • --no-create-home cruftがディレクトリにコピーされるのを防ぎます /etc/skel

これらのアプリケーションの使用法の説明には、adduserおよびaddgroupのコードにある長いフラグがありません

次の長い形式のフラグは、高山とdebian派生物の両方で機能するはずです。

ユーザーを追加する

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

注意すべき点の1つは、--ingroupが設定されていない場合、GIDがUIDと一致するように割り当てられることです。指定されたUIDに対応するGIDがすでに存在する場合、adduserは失敗します。

addgroup

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

ホストUID / GIDとしてコンテナーを実行するためのfixuidプロジェクトの独自の代替を作成しようとしたときに、これらすべてを発見しました。

私のエントリポイントヘルパースクリプトはGitHubにあります。

その目的は、ENTRYPOINTDockerが関連するバインドマウントからUIDおよびGIDを推測するようにする最初の引数として、そのスクリプトを先頭に追加することです。

アクセス許可をどこから推測するかを決定するために、環境変数「TEMPLATE」が必要になる場合があります。

(執筆時点では、スクリプトのドキュメントはありません。ToDoリストにまだ残っています!!)


9
+1、コマンド引数に長い形式を使用すると、読みやすくなり、メンテナンスが容易になります。シェルスクリプトを作成するときは常に長い形式を使用します(Dockerfile RUN シェルスクリプト以外の何ものでもありません)。
ビクターシュレーダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.