417

内部でいくつかのプロセス (uwsgi とセロリ) が実行されている docker コンテナーがあります。アクセス許可を割り当てるために、これらのプロセスの celery ユーザーと uwsgi ユーザー、および両方が属するワーカー グループを作成したいと考えています。

RUN adduser uwsgiDockerfile にとを追加しようと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] 
4

8 に答える 8

675

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

RUN useradd -ms /bin/bash newuser

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

その後、次を追加できます。

USER newuser
WORKDIR /home/newuser

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

docker run -t -i image
newuser@131b7ad86360:~$

newuserユーザー コマンドを呼び出す前に、実行する予定のプログラムを実行するためのアクセス許可を与える必要がある場合があります。

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

于 2014-12-30T10:05:10.143 に答える