GNU/Linux >> Linux の 問題 >  >> Linux

ユーザーを Docker コンテナに追加するにはどうすればよいですか?

トリックは useradd を使用することです インタラクティブなラッパー adduser の代わりに .私は通常、以下を使用してユーザーを作成します:

RUN useradd -ms /bin/bash newuser

これにより、ユーザーのホーム ディレクトリが作成され、bash がデフォルトのシェルになります。

次に追加できます:

USER newuser
WORKDIR /home/newuser

あなたのdockerfileに。その後のすべてのコマンドと対話セッションは、ユーザー newuser として実行されます :

docker run -t -i image
[email protected]:~$

newuser を与える必要があるかもしれません ユーザー コマンドを呼び出す前に実行する予定のプログラムを実行する権限。

セキュリティ上の理由から、コンテナー内で非特権ユーザーを使用することをお勧めします。また、いくつかの欠点もあります。最も重要なことは、あなたのイメージからイメージを派生させる人々は、スーパーユーザー権限でコマンドを実行する前に root に戻る必要があるということです.


Docker にユーザーを追加し、そのユーザーの下でアプリを実行することは、セキュリティの観点から非常に優れた方法です。そのためには、以下の手順をお勧めします:

FROM node:10-alpine

# Copy source to container
RUN mkdir -p /usr/app/src

# Copy source code
COPY src /usr/app/src
COPY package.json /usr/app
COPY package-lock.json /usr/app

WORKDIR /usr/app

# Running npm install for production purpose will not run dev dependencies.
RUN npm install -only=production    

# Create a user group 'xyzgroup'
RUN addgroup -S xyzgroup

# Create a user 'appuser' under 'xyzgroup'
RUN adduser -S -D -h /usr/app/src appuser xyzgroup

# Chown all the files to the app user.
RUN chown -R appuser:xyzgroup /usr/app

# Switch to 'appuser'
USER appuser

# Open the mapped port
EXPOSE 3000

# Start the process
CMD ["npm", "start"]

上記の手順は、NodeJS プロジェクト ファイルのコピー、ユーザー グループとユーザーの作成、プロジェクト フォルダーのユーザーへのアクセス許可の割り当て、新しく作成されたユーザーへの切り替え、そのユーザーの下でのアプリの実行の完全な例です。


Ubuntu

Dockerfile で次の行を試してください :

RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo -u 1001 ubuntu
USER ubuntu
WORKDIR /home/ubuntu

useradd オプション (参照:man useradd ):

  • -r--system システム アカウントを作成します。
  • -m--create-home ユーザーのホーム ディレクトリを作成します。
  • -d--home-dir HOME_DIR 新しいアカウントのホーム ディレクトリ。
  • -s--shell SHELL 新しいアカウントのログイン シェル
  • -g--gid GROUP プライマリ グループの名前または ID。
  • -G--groups GROUPS 補足グループのリスト。
  • -u--uid UID ユーザーIDを指定します。
  • -p--password PASSWORD 新しいアカウントの暗号化されたパスワード (例:ubuntu ).

デフォルト ユーザーのパスワードの設定

ユーザーパスワードを設定するには、-p "$(openssl passwd -1 ubuntu)" を追加します useradd まで コマンド。

または、次の行を Dockerfile に追加します :

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN echo 'ubuntu:ubuntu' | chpasswd

最初のシェル命令は、-o pipefail を確認することです。 オプションは RUN より前に有効になっています パイプが入っています。続きを読む:Hadolint:Dockerfile のリンティング


adduser によるインタラクティブな質問を避けるために、次のパラメータで呼び出すことができます:

RUN adduser --disabled-password --gecos '' newuser

--gecos パラメータは、追加情報を設定するために使用されます。この場合は空です。

ビジーボックスを備えたシステム (Alpine など) では、

を使用します。
RUN adduser -D -g '' newuser

busybox adduser を参照してください


Linux
  1. Linuxでユーザーをグループに追加する方法

  2. Ubuntuにユーザーを追加するにはどうすればよいですか?

  3. Dockerコンテナ内でプログラムを実行する方法は?

  1. DockerコンテナでMySQLを実行する方法

  2. 実行中のDockerコンテナでコマンドを実行する方法

  3. Dockerコンテナで実行されるプログラムにシグナルを送信するには?

  1. Linuxでユーザーをグループに追加する方法

  2. Dockerコンテナを終了する方法

  3. docker コンテナ内で cron ジョブを実行する方法