Docker:マウントが拒否されました。パス…はOS Xから共有されず、Dockerに認識されません


107

コマンド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れているため、Dockerに認識されている必要があるように見えます。これを解決するための助けがあれば幸いです。

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

より完全なリファレンスとして、これは.shスクリプトでこのpythonスクリプトを実行し、次にDockerコマンドを実行します。


3
やってみました-v /private/var/folders/zz/...か?
Dan Lowe

@DanLowe:コードは次のように行ったので、私は、いなかったWORKING_DIR="$(mktemp -d)と、-v ${WORKING_DIR}。しかし、それをWORKING_DIR="/private"$(mktemp -d)にハッキングすると、問題が解決するようです。どうもありがとうございました:)
Aayush

数分
Dan Lowe

よろしくお願いします。
Aayush

同じエラーメッセージが表示されます。私の状況は、ディレクトリにスペースが含まれていないことです。「サーバー側」を「サーバー側」に変更すると解決しました。それが誰かを助けることができることを願っています。
andrew54068

回答:


129

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

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

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

ファイル共有設定パネル

/varmacOSではへのシンボリックリンク/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)。Docker for Macのファイルシステム名前空間に関するドキュメントでは、次のように説明されています。

デフォルトでは、内のファイルを共有することができ/Users//Volumes//private/、および/tmp直接。Dockerにエクスポートされるディレクトリツリーを追加または削除するには、Docker設定のクジラメニュー-> [設定]-> [ファイル共有]の[ファイル共有]タブを使用します。(設定を参照してください。)

-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によってエクスポートされません。/varLinux VMには存在しますが、存在し/var/foldersません。したがって、パスは使用できず、マウントは失敗します。

パスを/private/varに変更すると、macOS /privateはマウントのためにファイルシステムツリー全体をエクスポートするため、成功します。

移植性を高めるために、現在実行しているプラ​​ットフォームをテストし、それがmacOSの場合は、マウントパスの前にを付け/privateます。


4
@SamuelMéndez最初のものだけ。形式はmac-path:container-path/private、Mac側にのみ存在します。
Dan Lowe

2
私は同様の問題に直面していますが、誰でも解決するのを手伝ってくれるでしょう( "b'Mounts denied:\ r \ nパス/ etc / localtime \ r \ nisはOS Xから共有されておらず、Dockerに認識されていません。\ r \ n共有パスを設定できますDocker-> Preferences ...-> File Sharingから。\ r \ n詳細については、docs.docker.com / docker - for - mac / osxfs /#namespaces参照してください。\ r \ n。 '")/ etcを追加してDocker-> Preferences ...-> File Sharingは/ etcがmac os用に予約されていると言いますか?
Sandish Kumar HN 2018

1
@DanLowe回答ありがとうございます。/ private / etc / localtimeを追加しようとすると、「エクスポートパス/ private / etc / localtimeがエクスポートパス/ privateと重複しています」がスローされます。「/ etc / localtime」の追加に疲れましたが、「APIError:500サーバーエラー:内部サーバーエラー(「マウントソースパス '/ etc / localtime」の作成中にエラーが発生しました:mkdir / etc / localtime:ファイルが存在します」という新しいエラーが発生しました) " 何か案が??
Sandish Kumar HN 2018


1
@DanLowe親切な回答ありがとうございます。私はあなたの言う事が分かります。Mac OSで開発する場合は、Ubuntuにデプロイします。docker-composeを使用してボリューム/ etc / localtimeを作成します。システムをチェックして別のパスを設定しますか?同様/private/etc/localtimeのMac OS用の/etc/localtimeUbuntuのため。Docker-compose.ymlでシステム情報を確認する方法は?ありがとうございました!
hzwzw 2018

4

代替ソリューションとして:

パスをから/private/instance1-data:/homeに変更します./instance1-data:/home

* nixランド、つまりDockerでは、.は現在のディレクトリを示します。macOSはうるさいので、サンドボックス化についてもより厳しくなっているため、これはmacOSの実行可能なソリューションのようです。必要なフォルダをinstance1同じディレクトリに作成するだけです。

この解決策の別の利点は、それが実行する必要取り除くことにあるdocker-composeとしsudo。いずれにしても、この場合は害はありませんが、それでもプラスです。


2

例として、Portainerを使用して、このコマンドは私のために働きます:

docker run -d --restart unless-stopped -p 9000:9000 \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v /var:/data portainer/portainer --no-auth

しかし、もし私が-v /var:/dataまったく変化させても、それは機能しません。Dockerがmkdirを実行しようとしているためだと思いますが(確かではありません)。したがって、マウントしようとすると-v /var/whatever:/data、十分な権限がないためにmkdirが失敗し、機能しません。

私は2台のMac(High Sierra)を持っていますが、両方で試してみました。同じ問題。また、Docker Betaチャネルを使用してみました。Dan Loweの答えは理解できたと思います。うまくいったら、この答えを更新します。


2

/var/tmpMacにディレクトリを作成して、Dockerコンテナーにマウントしたいという同様の問題がありました。

次のようにファイルにディレクトリパスを追加することで解決しました:

$ cat ~/Library/Group\ Containers/group.com.docker/settings.json  
{
  "filesharingDirectories" : [
    "\/Users",
    "\/Volumes",
    "\/private",
    "\/tmp",
    "\/var\/tmp"
  ],
…

これ/var/tmpで、Docker-> preference-> resources-> file sharingでディレクトリを確認できました。次に、Dockerを再起動しました。

その後、マウントの問題を解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.