トリックは 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 を参照してください