私の構成に関する最初の情報:
pool/mydataset
が所有するuser1
で作成されたデータセットここで、pool/mydataset
のファイル/フォルダーにアクセスするためのコンテナーの1つが必要です。私は以下を試しました:
user1
を作成しましたpool/lxc/mycontainer/config
を編集し、追加しました:
lxc.mount.entry = /pool/mydataset mnt/mydataset none rw,bind 0 0
コンテナを起動するとデータセットがマウントされますが、コンテナ内のls -la /mnt/mydataset
にはnobody:nogroup
ではなくuser1:user1
が表示されます。これは、すべてのファイルが読み取り専用であることを意味します。
マウントされたディレクトリで正しい権限を取得する方法はありますか?
私も同じことを経験しました。私の場合、その理由は、バインドマウントされるファイルシステムがUID:GID ホストマシンの範囲内によって所有されているためです。
特権のないコンテナーは、定義上、通常の範囲外のUIDと、コンテナー内の正常な外観を与えるためのユーザー名前空間を使用します。
ホストマシンから見て、コンテナのinit
の下にあるものはすべて数値UID1000000に属していることに注意してください。 コンテナ内では、予想どおり、PID1はUIDルートです。
どういう意味ですか?ホストマシンに、通常のユーザー(おそらくroot、おそらく通常のユーザー)が所有するファイルシステムがあり、それをコンテナーにバインドマウントする場合、UID(整数として格納されます)make noコンテナ内のセンス。
さらに、コンテナが認識するUIDはそのユーザー名前空間にさえ属していないため、コンテナ内のrootでさえそれらのファイルをchown
できません。
解決策:ホストマシンで、ファイルをchown
して、コンテナ内のルートに属するようにします。私の場合、上の写真のように、次のことをしなければなりませんでした。
tank/mydataset
at /tank/mydataset
ホストマシンでchown 1000000:1000000 /tank/mydataset
lxc.mount.entry = /tank/mydataset path/in/container/ none bind 0 0