Dockerアプリ内でPUIDとPGIDを変更しても、コンテナがホストのすべてのファイルシステムに書き込めるとは限りません。2026年2月のこのスレッドでは、ユーザーが複数のユーザーIDとグループIDを試した後も、/media/sda2にマウントされたSSDへHandBrakeが書き込めませんでした。
決定的な要因はファイルシステムでした。ドライブはexFATで、root所有としてマウントされていました。exFATはext4と同じ方法で通常のLinuxファイル単位のUID/GID所有権を提供しないため、コンテナのユーザーだけを変更しても、ホスト側のマウント権限の問題は解決できませんでした。
問題はコンテナのユーザーだけではなかった
ユーザーの説明から、HandBrakeコンテナにはすでにPUIDとPGIDが設定されていましたが、ホスト側のフォルダーは依然としてroot所有として表示されていました。コミュニティの回答者は、DockerのIDとホストファイルシステムの仕様を正しく切り分けました。
この違いは、多くのセルフホストアプリに当てはまります。コンテナが利用できるのは、ホストのマウントが提供する権限の範囲だけです。
exFATはマウント単位で権限を割り当てる
exFATはOS間でディスクを移動する用途に便利ですが、ext4のようにLinuxの所有権やモードビットを保存しません。UID、GID、マスクの動作は、ファイルシステムのマウント時に設定されます。
そのため、exFATディスクでは通常のchownやchmodを実行しても効果がないように見えることがあります。一方、ext4では同じコマンドが通常どおり機能します。
現行のZimaOSでは、exFATは読み書き対応ファイルシステムとして掲載されています。これは基本的なファイルシステムアクセスについての説明であり、Docker固有のPOSIX権限動作を意味するものではありません。サーバー用ディスクで移植性とLinuxネイティブの権限のどちらを重視するか判断する際は、最新のファイルシステム対応表を参照してください。
このケースではUIからの再フォーマットも失敗した
その後の調査で、ディスクはZimaOSが管理する複数の場所にマウントされ、Filesサービスによって使用中の状態が続いていたことが判明しました。スレッドではIceWhale公式の修復手順には至らなかったため、コミュニティの返信に含まれる破壊的なアンマウントコマンドやfstabコマンドを公式手順として再掲載すべきではありません。
ホストフォルダーをコンテナ内へ明示的に割り当てる
後の返信では、正しい概念上のボリュームマッピングが示されました。実在するホストディレクトリを選び、それをアプリケーションが想定するコンテナ内のパスに割り当てます。
Linux専用のコンテナストレージではext4の方が簡単な理由
コミュニティでは、Dockerワークロード専用のディスクにはext4を使うことが推奨されました。ext4は通常のLinux所有権と権限ビットをサポートするためです。これは実用的なLinux管理上の推奨であり、すべてのZimaOSデータディスクでext4を使わなければならないというIceWhaleの要件ではありません。
クロスプラットフォームの移植性をより重視する場合は、exFATも適しています。ただし、マウント単位の所有権モデルを、コンテナを実行するユーザーに合わせる必要があります。
アプリストレージをシステムドライブから離す
現行のZimaOSでは、アプリデータの保存場所を選択し、実際のストレージフォルダーをコンテナに割り当てられます。ディスクの所有権を変更したり再フォーマットしたりする前に、ホストフォルダーがコンテナボリュームになる仕組みを確認すると役立ちます。
Dockerフォルダー権限に関するFAQ
PUIDとPGIDを変更してもexFATドライブが直らなかったのはなぜですか?
exFATは通常のLinuxファイル所有権を保存しないためです。マウント時のUID/GIDとマスクによって、ファイルシステムがLinuxプロセスからどのように見えるかが決まります。
ZimaOSはexFATの読み書きに対応していますか?
はい。現行のZimaOSではexFATが読み書き対応として掲載されています。ただし、POSIX所有権についてext4と同等になるわけではありません。
すべてのDockerデータディスクをext4にすべきですか?
一律にそうする必要はありません。ただし、通常の所有権と権限に依存するLinuxコンテナ専用のディスクであれば、ext4の方が簡単です。
スレッド内でフォーマットエラーは解決しましたか?
いいえ。公式の最終的な修正手順は投稿されませんでした。ディスクはZimaOSが管理するマウントとサービスによって使用中の状態が続いていました。
