GNU/Linux >> Linux の 問題 >  >> Linux

ヒューズ ベースのボリュームを Docker コンテナーに公開できません

問題をローカルで再現できません。 encfs ファイルシステムを Docker ボリュームとして公開しようとすると、コンテナーを開始しようとするとエラーが発生します:

FATA[0003] Error response from daemon: Cannot start container <cid>:
setup mount namespace stat /visible: permission denied 

だから、何か違うことが起こっている可能性があります。いずれにせよ、これが私の問題を解決したものです:

デフォルトでは、FUSE はファイルシステムをマウントしたユーザーのみがそのファイルシステムへのアクセスを許可されます。 Docker コンテナを実行している場合、そのコンテナは最初は root として実行されています .

allow_root を使用できます または allow_other FUSE ファイルシステムをマウントするときのマウント オプション。例:

$ encfs -o allow_root /encrypted /other

ここでは、allow_root root ユーザーにマウントポイントへのアクセスを許可しますが、allow_other 誰でもマウントポイントにアクセスできるようになります (ディレクトリの Unix パーミッションでアクセスが許可されている場合)。

allow_root を使用して encfs ファイルシステムでマウントした場合 、その後、そのファイルシステムを Docker ボリュームとして公開できますおよび そのファイルシステムの内容は、コンテナー内から正しく表示されます。


これは、ホストがマウントポイントをマウントする前に docker デーモンを開始したためです。この場合、ディレクトリ名の inode はまだホストのローカル ディスクを指しています:

ls -i /mounts/
1048579 s3-data-mnt

次に、s3fs などのヒューズ デーモンを使用してマウントする場合:

/usr/local/bin/s3fs -o rw -o allow_other -o iam_role=ecsInstanceRole /mounts/s3-data-mnt
ls -i
1 s3-data-mnt

私の推測では、docker はディレクトリ名を i ノードにキャッシュするブートストラップを行っていると思います (この空白を埋めることができる以上の知識を持っている人)。

あなたのコメントは正しいです。マウントが完了した後に docker を再起動するだけで、ボリュームはホストからコンテナーに正しく共有されます。 (または、すべてのマウントのマウントが完了するまで、docker の起動を遅らせることもできます)

興味深いのは(しかし、今では完全になっています)、コンテナを終了してホストのマウントポイントをアンマウントすると、コンテナ内から共有ボリュームへのすべての書き込みが魔法のように表示されたことです(それらはiノードに保存されていましたホスト マシンのローカル ディスク):

[[email protected] s3-data-mnt]# echo foo > bar
[[email protected] s3-data-mnt]# ls /mounts/s3-data-mnt
total 6
1 drwxrwxrwx  1 root root    0 Jan  1  1970 .
4 dr-xr-xr-x 28 root root 4096 Sep 16 17:06 ..
1 -rw-r--r--  1 root root    4 Sep 16 17:11 bar
[[email protected] s3-data-mnt]# docker run -ti -v /mounts/s3-data-mnt:/s3-data busybox /bin/bash
[email protected]:/mounts/s3-data# ls -als
total 8
4 drwxr-xr-x  3 root root 4096 Sep 16 16:05 .
4 drwxr-xr-x 12 root root 4096 Sep 16 16:45 ..
[email protected]:/s3-data# echo baz > beef
[email protected]:/s3-data# ls -als
total 9
4 drwxr-xr-x  3 root root 4096 Sep 16 16:05 .
4 drwxr-xr-x 12 root root 4096 Sep 16 16:45 ..
1 -rw-r--r--  1 root root    4 Sep 16 17:11 beef
[email protected]:/s3-data# exit
exit
[[email protected] s3-data-mnt]# ls /mounts/s3-data-mnt
total 6
1 drwxrwxrwx  1 root root    0 Jan  1  1970 .
4 dr-xr-xr-x 28 root root 4096 Sep 16 17:06 ..
1 -rw-r--r--  1 root root    4 Sep 16 17:11 bar
[[email protected] /]# umount -l s3-data-mnt
[[email protected] /]# ls -als
[[email protected] /]# ls -als /s3-stn-jira-data-mnt/
total 8
4 drwxr-xr-x  2 root root 4096 Sep 16 17:28 .
4 dr-xr-xr-x 28 root root 4096 Sep 16 17:06 ..
1 -rw-r--r--  1 root root    4 Sep 16 17:11 bar

Linux
  1. Unix でディレクトリを削除できない

  2. ホスト ポートを Docker コンテナに転送する

  3. Docker コンテナーでサービスを自動的に開始する

  1. Docker コンテナのファイル システムの探索

  2. docker は Linux コンテナー内で実行できますか?

  3. Docker 内の Docker はボリュームをマウントできません

  1. (コンテナ内で)rootにノーと言ってください

  2. Dockerの概要

  3. Linux Docker コンテナーで実行しているときに証明書を読み取れない - Windows で動作する