私は、内部使用のために、Docker コンテナに暗号化されたファイル システムのボリュームを提供しようとしています。コンテナは通常どおりボリュームに書き込みますが、実際にはホストはデータをファイル システムに書き込む前に暗号化します。
私は EncFS を使用しようとしています - ホスト上ではうまく動作します、例:
encfs /encrypted /visible
/visible にファイルを書き込むことができ、それらは暗号化されます。ただし、ボリュームとして /visible を使用してコンテナを実行しようとすると、次のようになります。
docker run -i -t --privileged -v /visible:/myvolume imagename bash
コンテナ内にボリュームはありますが、/encrypted
EncFS を経由せず、元のフォルダ上に存在します。EncFS をアンマウントすると/visible
、コンテナによって書き込まれたファイルを見ることができます。言うまでもなく、/encrypted
空です。
docker で EncFS を介してボリュームをマウントし、フォルダーに直接書き込まないようにする方法はありますか? 一方、NFS マウントをボリュームとして使用すると、docker は正常に動作します。デバイスをマウントしたローカル フォルダーではなく、ネットワーク デバイスに書き込みます。
ありがとう
ベストアンサー1
ローカルで問題を再現できません。encfs ファイルシステムを Docker ボリュームとして公開しようとすると、コンテナを起動しようとしてエラーが発生します。
FATA[0003] Error response from daemon: Cannot start container <cid>:
setup mount namespace stat /visible: permission denied
つまり、何か別のことが起こっている可能性があります。いずれにせよ、これが私の問題を解決した方法です:
デフォルトでは、FUSE はファイルシステムをマウントしたユーザーのみにそのファイルシステムへのアクセスを許可します。Docker コンテナを実行する場合、そのコンテナは最初は として実行されますroot
。
allow_root
FUSE ファイルシステムをマウントするときに、またはマウント オプションを使用できますallow_other
。例:
$ encfs -o allow_root /encrypted /other
ここで、allow_root
ルート ユーザーがマウント ポイントにアクセスできるようになりますが、allow_other
ディレクトリの Unix 権限でアクセスが許可されている場合、誰でもマウント ポイントにアクセスできるようになります。
encfsファイルシステムを使用してマウントした場合allow_root
、そのファイルシステムをDockerボリュームとして公開できます。そしてそのファイルシステムの内容はコンテナ内から正しく表示されます。