見出し画像

MacでDocker上の共有フォルダが開けない

Failed to open directory "share"

MacでDocker上のUbuntu(Lin4Neuro-jammy)から共有フォルダを開こうとしたら、下のような警告が出て開けませんでした。

結論から言うと、これは共有フォルダ内のファイルの拡張属性によるエラーです。

以下の方法で拡張属性を確認することができます。
1.Macのターミナル上で共有フォルダに移動
2. ls -l@
拡張属性がついている場合には、例えば以下のような表示になります。

ls -l@
total 256
-rwxrwxrwx@ 1 lop_eared  staff  12 Oct 13 10:02 a.txt
com.apple.quarantine 23 
com.apple.TextEncoding 15 
com.apple.lastuseddate#PS 16 

ポイントは「-rwxrwxrwx@」の部分です。これはファイルのパーミッションを表しているのですが、最後の@は拡張属性といってOSごとに決められている属性を表しています。具体的な内容はその下のcom.appleから始まるメッセージにあります。これは場合によって異なりますが、上記のメッセージに関するChatGPTの解説の要約は以下の通りでした。


このメッセージは、macOSでファイルに付与されるメタデータに関するものです。

  1. com.apple.quarantine

    • これはmacOSの「隔離属性」を示しています。インターネットからダウンロードされたファイルや、初めて実行されるアプリケーションに対して、macOSがセキュリティチェックを行うために使用します。

    • 値「23」は、隔離されている理由やステータスに関する情報です。

  2. com.apple.TextEncoding

    • この属性はファイルのテキストエンコーディング(文字コード)を示しています。たとえば、UTF-8やISO-8859-1などのエンコーディング情報が格納されています。

    • 値「15」は、エンコーディングに関する内部的な参照を表しています。

  3. com.apple.lastuseddate#PS

    • この属性はファイルが最後に使用された日時を示します。

    • 値「16」は、タイムスタンプや日付に関連する情報です。


要するにこの拡張属性が付いていると、Ubuntu側からは「よくわからないパーミッションがついている! ⇨ 開けない」となってしまうわけです。

拡張属性をまとめて消すにはMacのターミナルから共有フォルダ内で以下のコマンドを実行します。

xattr -cr *

実行後、再度 ls -l@ で確認してみると

ls -l@
total 256
-rwxrwxrwx  1 lop_eared  staff  12 Oct 13 10:02 a.txt

これでDocker上のUbuntuから共有フォルダを開くことができるようになりました。

わかってみると単純なことなのですが、頼みの綱のChat GPT先輩もGoogle先輩も答えをくれず、docker自体のpermission関係のエラーかと思い散々遠回りしてしまいました。

蛇足ですが、テキストファイルに関してはMacのGUIで開くことで拡張属性が付けられます。ターミナルから

echo "Hello Docker" > b.txt

でファイルを作成した場合には拡張属性は付きませんでした。

この記事が気に入ったらサポートをしてみませんか?