1. ホーム
  2. macos

[解決済み] マウントが拒否されました。パスがOS Xから共有されておらず、Dockerに知られていない。

2022-06-15 06:28:35

質問

コマンド docker run -v /var/folders/zz/... は次のようなエラーを発生させます。

docker: Error response from daemon: Mounts denied: 
The paths /var/folders/zz/... and /var/folders/zz/...
are not shared from OS X and are not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.

ファイル共有を開くと、/private がすでに表示されています。

もし私が /var/folder/ を追加しようとすると、それは /private/var/folders に解決され、それは /private のサブセットであるため、追加は拒否されます。

要約すると、私には、ディレクトリ /var/folders/.. のサブディレクトリとして OS X で共有されています。 /private のサブディレクトリとしてOS Xで共有されており、したがってDockerに知られている必要があります。これを解決するための何らかの支援をお願いします。

実験として、私は /private を、ファイル共有の /private/var/folders と入力し、dockerを再起動しましたが、結果は変わりませんでした。

より完全な参考のために、これは .shスクリプト を実行するものです。 この python スクリプト を実行し、その後にdockerコマンドを実行します。

どのように解決するのですか?

Mac版Docker ボリュームマウントは基本的なDockerシステムとは異なる挙動をします。これは主に、Docker が Apple のファイルシステムサンドボックスガイドラインに準拠しようとするためです。

Dockerの環境設定に示されているように、特定のパスのみがmacOSによってエクスポートされます。

  • /Users
  • /Volumes
  • /tmp
  • /private

/var は、macOSではシンボリックリンクで /private . それはまた /tmp :

$ ls -ld /tmp /var
lrwxr-xr-x@ 1 root  wheel  11 Jan 26 16:18 /tmp -> private/tmp
lrwxr-xr-x@ 1 root  wheel  11 Jan 26 16:18 /var -> private/var

なぜ /tmp は共有パネルに表示されるのに /var は表示されません (両方とも /private )? MacのDocker ファイルシステムの名前空間に関するドキュメント で説明しています。

デフォルトでは、ファイルの共有は /Users/ , /Volumes/ , /private/ そして /tmp を直接指定します。Dockerにエクスポートされるディレクトリツリーを追加または削除するには、Dockerの環境設定whaleのFile sharingタブを使用します。 menu -> Preferences -> File sharingを選択します。(環境設定参照)。

で使用される他のすべてのパスは -v で使用される他のすべてのパスは、Dockerコンテナを実行しているMoby Linux VMから供給されます。 のような引数は -v /var/run/docker.sock:/var/run/docker.sock のような引数は期待通りに動作するはずです。macOS のパスが共有されておらず、VM に存在しない場合、VM に作成するのではなく、マウントをバインドしようとすると失敗します。 VM に既に存在し、ファイルを含むパスは Docker によって予約されており、macOS からエクスポートすることはできません。

以下のことに注意してください。 /var/run は、macOS からではなく、Linux VM からマウントされる場所として、ここで特に言及されています。

ボリュームマウントを要求すると、macOS ファイルシステムのエクスポートが最初にチェックされます。そこに一致するものがない場合、Docker が実行されている Linux VM が次にチェックされます。どちらも要求されたパスを持っていない場合、マウントは失敗します。

あなたの場合 /var は macOS ではエクスポートされません。 /var は Linux VM に存在しますが /var/folders は存在しません。したがって、パスは利用できず、マウントは失敗します。

もし、パスを /private/var に変更すると、macOS は全体の /private ファイルシステムツリー全体をエクスポートしてマウントするからです。

よりポータブルにするために、現在どのプラットフォームで動作しているかをテストし、それがmacOSであれば、マウントパスのプレフィックスとして /private .