内部でいくつかのプロセス (uwsgi と celery) が実行されている docker コンテナがあります。権限を割り当てるために、これらのプロセス用に celery ユーザーと uwsgi ユーザーを作成し、その両方が属するワーカー グループも作成したいと考えています。
RUN adduser uwsgi
Dockerfile にと を追加しようとしましたRUN adduser celery
が、これらのコマンドは入力を求めるため、問題が発生しています (ビルドからの応答を以下に掲載しました)。
コンテナ内で実行されているワーカーの権限を設定するために、Docker コンテナにユーザーを追加する最適な方法は何ですか?
私の Docker イメージは、公式の Ubuntu14.04 ベースから構築されています。
以下は、adduser コマンドを実行したときの Dockerfile からの出力です。
Adding user `uwsgi' ...
Adding new group `uwsgi' (1000) ...
Adding new user `uwsgi' (1000) with group `uwsgi' ...
Creating home directory `/home/uwsgi' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for uwsgi
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []: Work Phone []: Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
---> 258f2f2f13df
Removing intermediate container 59948863162a
Step 5 : RUN adduser celery
---> Running in be06f1e20f64
Adding user `celery' ...
Adding new group `celery' (1001) ...
Adding new user `celery' (1001) with group `celery' ...
Creating home directory `/home/celery' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for celery
Enter the new value, or press ENTER for the default
Full Name []: Room Number []: Work Phone []:
Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
ベストアンサー1
コツは、useradd
インタラクティブ ラッパーの代わりにを使用することですadduser
。私は通常、次のようにしてユーザーを作成します。
RUN useradd -ms /bin/bash newuser
これにより、ユーザーのホーム ディレクトリが作成され、bash がデフォルトのシェルになります。
次に以下を追加できます:
USER newuser
WORKDIR /home/newuser
dockerfile に追加します。以降のすべてのコマンドと対話型セッションは、ユーザーとして実行されますnewuser
。
docker run -t -i image
newuser@131b7ad86360:~$
newuser
ユーザー コマンドを呼び出す前に、実行するプログラムを実行する権限を付与する必要がある場合があります。
セキュリティ上の理由から、コンテナ内で非特権ユーザーを使用することは良い考えです。ただし、欠点もいくつかあります。最も重要なのは、あなたのイメージから派生したイメージを作成するユーザーは、スーパーユーザー権限でコマンドを実行する前に、ルートに戻る必要があることです。