Dockerコンテナ内にマウントされたボリュームに対する変更は、通常のユーザーが行ったように見えますが、まだroot権限を保持します。

Dockerコンテナ内にマウントされたボリュームに対する変更は、通常のユーザーが行ったように見えますが、まだroot権限を保持します。

私が使うなら--userパラメータをdocker run使用すると、変更(単純な変更などmkdir)がその(ルートではない)ユーザーによって実行されるように見えます。ただし、aptroot権限が必要なため、コンテナ内部などのコマンドを実行することはできません。デフォルトでは、sudoDockerdebianイメージはプリインストールされていませんubuntu

この問題を解決するエレガントな方法は何ですか?

答え1

知っていたらいつそしてどこ変更が記録され、chown後で次のファイルで使用できます。

  • パラメータ(、、)を使用して、id -uホスト(ルートではない)ユーザーのユーザーとグループIDをDockerコンテナに渡します。id -g--env
  • rootでコマンド/スクリプトを実行する(コンテナ内)
  • 最後にchown(コンテナ内で)実行して、ホストユーザーが変更したように見えます。

答え2

これは特にエレガントな解決策ではないと思いますが、ユーザーとグループIDが(ルートではなく)ホストユーザーのIDと一致するコンテナ内にダミーユーザーを作成することは可能です。

  • パラメータ(、、)を使用して、id -uホスト(ルートではない)ユーザーのユーザーとグループIDをDockerコンテナに渡します。id -g--env
  • ホスト(ルートではない)ユーザーのグループIDと一致する新しいグループを作成します。

    addgroup --gid $DUMMY_GID dummy
    
  • ホスト(ルートではない)ユーザーのユーザーIDと一致する新しいユーザーを作成します。

    adduser --uid $DUMMY_UID --gid $DUMMY_GID --disabled-password --gecos "" dummy
    
  • root権限を必要とするコマンドが機能します

  • 他のコマンド/スクリプトの実行runuser

    runuser -u dummy -- command
    

関連情報