1. ホーム
  2. linux

[解決済み] Dockerコンテナにユーザーを追加する方法は?

2022-03-24 05:30:41

質問

私は、いくつかのプロセス(uwsgiとcelery)が内部で実行されているドッカーコンテナを持っています。私は、これらのプロセスのためにceleryユーザーとuwsgiユーザーを作成し、権限を割り当てるために、それらが両方とも属するワーカーグループを作成したいと思っています。

を追加してみました。 RUN adduser uwsgiRUN adduser celery をDockerfileに追加しましたが、これらのコマンドは入力を求めるため、問題が発生しています (以下にビルド時の応答を掲載します)。

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] 

解決方法は?

そのコツは useradd の代わりに、対話型ラッパーである adduser . でユーザーを作るのが普通です。

RUN useradd -ms /bin/bash newuser

で、ユーザーのホームディレクトリを作成し、bashがデフォルトシェルになるようにします。

その後、追加することができます。

USER newuser
WORKDIR /home/newuser

をdockerfileに追加してください。その後のすべてのコマンド、および対話型セッションは、ユーザ newuser :

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

を与える必要があるかもしれません。 newuser を実行する前に、実行しようとするプログラムを実行するためのパーミッションが必要です。

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