7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Dockerコンテナ内でおこるOperation not permittedはアプリ側の問題かもしれない

Posted at

##背景

Docker × Laravel で開発を行おうとしたところ、dockerコンテナ内でlaravelのアプリケーションディレクトリに対するあらゆるコマンドがOperation not permittedで使えない状況になった。
構成としては以下の形。app/がlaravelのファイル群が入ったディレクトリで、これをvolumeでマウントしている。

/application
┏ docker-composer.yml
┣ docker/ 
┃   ┗ Dockerfile
┗ app/ 
    ┣ app/
    ┣ bootstrap/
    ┣ config/
        :
docker-composer.yml
version: '3'
volumes:
  mysql-volume:
services:
  app:
    build: ./docker
    ports:
      - 80:80
    volumes:
      - ./app:/var/www/app
    working_dir: /var/www/app
  db:
    image: mysql:8.0
    ports:
      - 3306:3306
    environment:
      MYSQL_DATABASE: database
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    volumes:
      - mysql-volume:/var/lib/mysql

Operation not permitted

コンテナを立ち上げてbashで中に入ってみると、appディレクトリにおいてlsコマンド、composerなどあらゆる操作ができない。

$ docker-compose up -d
Starting application_app_1 ... done
Starting application_db_1  ... done

$ docker-compose exec app bash
root@dd0e1979fc6b:/var/www/app# ls
ls: reading directory '.': Operation not permitted

root@dd0e1979fc6b:/var/www/app# composer install
                                                         
  [ErrorException]                                                                    
  file_get_contents(./composer.json): Failed to open stream: Operation not permitted  
                                              

別のディレクトリではlsコマンドを実行することができる。
ディレクトリやファイルの権限がないのかと思ったが、読み取りや実行権限もありそう。
なぜかappディレクトリだけ制限がかかっている状態。

root@dd0e1979fc6b:/var/www/app# cd ..
root@dd0e1979fc6b:/var/www# ls -l
total 4
drwxr-xr-x 27 root     root      864 Nov 12 05:10 app
drwxrwxrwx  1 www-data www-data 4096 Oct 12 04:45 html
                                       

ここで、githubにある同じファイル群を別の方にcloneしてもらい、同じ操作をしてもらったところ、普通にlsやcomposerを使うことができていた。
よって、自分のPCの何らかの設定が怪しいと思われた・・・。

##原因と対応

これは、Docker for Mac側でデスクトップへのアクセスが許可されていないことが原因だった。
docker-composer.ymlでマウントしているホスト側の./appがDesktop下にあったため、docker for macが参照できなかったっぽい。

macのシステム環境設定 > セキュリティとプライバシーから、「プライバシー」タブへ移動する。

スクリーンショット 2021-11-12 14.25.35.png
このDockerの "デスクトップ"フォルダのチェックマークをつけて、保存する。

root@3e4c6b151144:/var/www/app# ls
CHANGELOG.md  app      bootstrap      composer.lock  database      phpunit.xml  resources  server.php  tests   webpack.mix.js
README.md     artisan  composer.json  config         package.json  public       routes     storage     vendor

root@3e4c6b151144:/var/www/app# composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 111 installs, 0 updates, 0 removals
    Failed to download doctrine/inflector from dist: The zip extension and unzip/7z commands are both missing, skipping.
...

appディレクトリで操作ができるようになりました。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?