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 (林 晃) Representative(代表), Software Engineer(ソフトウェアエンジニア)

アールケー開発代表。Appleプラットフォーム向けの開発を専門としているソフトウェアエンジニア。ソフトウェアの受託開発、技術書執筆、技術指導・セミナー講師。note, Medium, LinkedIn
-
Representative of RK Kaihatsu. Software Engineer Specializing in Development for the Apple Platform. Specializing in contract software development, technical writing, and serving as a tech workshop lecturer. note, Medium, LinkedIn

目次