macOSでDockerを使うときはプライバシー設定も確認する

Dockerの機能で、ホスト側のフォルダをマウントさせて、共有フォルダとして使用する機能があります。macOS Catalina 10.15以降で、この機能でマウントさせたフォルダにアクセスできないということがありました。

結論を書くと、macOSのプライバシー設定で対象のフォルダがブロックされてしまい、アクセスできなくなっていたということでした。

この記事は、この問題の原因をどのように確認して、解決できたかについてまとめています。

目次

状況

Dockerでnginxをコンテナ化させて、開発用のテストWebサーバーを作っています。その中に配置するファイルは、色々変更を加えたいので、docker-compose.ymlファイルに次のように記述して、ローカルフォルダをコンテナ内にマウントさせています。

version: "3"
services:
  nginx:
    build: .
    ports:
      - 80:80
    volumes:
      - ./content_home:/usr/share/nginx/html

しかし、実行すると、HTTP Status 404 Not Foundとなってしまい、アクセスできないという状況になってしまいました。

このdocker-compose.ymlファイルを含めて、関連ファイル一式を一つのフォルダに入れて、他のディレクトリで実行すると、問題なく表示されています。

どこを確認するべきか

このようなときに確認するべき場所は以下の通りです。

  • /usr/share/nginx/htmlは存在しているか?
  • /usr/share/nginx/html内のファイルは見えるか?
  • ホスト側の./content_homeは存在しているか?
  • ホスト側の./content_homeのパーミッションなどのアクセス権は、読み取り権限が付与されているか?

コンテナ側の確認

コンテナ側の/usr/share/nginx/htmlを確認します。

% docker container exec testserver_nginx_1 ls /usr/share/nginx
html

htmlと出力されたので、htmlフォルダは存在しています。次にフォルダ内のファイルを確認します。

% docker container exec testserver_nginx_1 ls /usr/share/nginx/html
ls: cannot open directory '/usr/share/nginx/html': Operation not permitted

アクセスが拒否されてしまいました。アクセス権に問題があることが予想されます。

ホスト側の確認

ホスト側のフォルダの存在確認とアクセス権を確認します。Finderで見るのが確認です。Finderでフォルダを選択して、「ファイル」メニューから「情報を見る」を選択します。「共有とアクセス権」を確認します。

「everyone」と「staff」が「読み出しのみ」、「自分」が「読み書き」になっていれば問題ありません。

macOSのプライバシー設定

macOSのプライバシー設定で、以下の3つのフォルダはアプリ毎にアクセス許可を与える必要があります。

  • ダウンロード
  • 書類
  • デスクトップ

アプリをインストールしてから初めて上記のフォルダにアクセスしようとしたときに、OSが許可するかを確認するダイアログを表示します。そこで許可していないとアクセスできません。

確認するには、次のように操作します。

(1) アップルメニューから「システム環境設定…」を選択します。

(2) 「セキュリティとプライバシー」をクリックします。

(3) 「プライバシー」タブを開きます。

(4) 「ファイルとフォルダ」を選択します。

ファイルとフォルダのアクセス権を設定する
ファイルとフォルダのアクセス権を設定する

私の環境でアクセス出来なかった原因は、スクリーンキャプチャのように「デスクトップフォルダ」のチェックが外れていたからでした。

今回はたまたま、デスクトップフォルダで作業していました。

覚えてはいませんが、外してしまったようです。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Akira Hayashiのアバター Akira Hayashi 代表・ソフトウェアエンジニア

アプリ開発が好きなアプリ開発者。このブログは学習メモを記事にしたテックブログです。仕事ではアプリ開発をメインに、技術書の執筆やセミナーの講師などもしています。業務や著書のサイトはこちらです→ アールケー開発

目次