web-dev-qa-db-ja.com

LaravelおよびDockerを使用したアクセス許可拒否エラー

NginxとAppの2つのdockerコンテナーがあります。
アプリコンテナはPHP-fpmを拡張し、my Laravel= Code。

私のdocker-compose.yml 私がやっている:

version: '2'
services:
    nginx:
        build:
            context: ./nginx
            dockerfile: ./Dockerfile
        ports:
            - "80:80"
        links:
            - app
    app:
        build:
            context: ./app
            dockerfile: ./Dockerfile

私のNginx Dockerfileでは:

FROM nginx:latest
WORKDIR /var/www
ADD ./nginx.conf /etc/nginx/conf.d/default.conf
ADD . /var/www
EXPOSE 80

私のApp Dockerfileでは:

FROM php:7-fpm
WORKDIR /var/www
RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client && docker-php-ext-install mcrypt pdo_mysql
ADD . /var/www

Docker-compose upを正常に実行した後、localhostを試行すると次のエラーが発生します

ストリームまたはファイル "/var/www/storage/logs/laravel.log"を開けませんでした:ストリームを開けませんでした:許可が拒否されました

私の理解では、ストレージフォルダーはウェブサーバーによって書き込み可能である必要があります。
これを解決するにはどうすればよいですか?

9
Anand Naik B

以下のようにDockerfileを作成します-

FROM php:7-fpm
WORKDIR /var/www
RUN apt-get update && apt-get install -y libmcrypt-dev mysql-client && docker-php-ext-install mcrypt pdo_mysql
ADD . /var/www
RUN chown -R www-data:www-data /var/www

これにより、/var/wwwのデフォルトユーザーであるwww-dataがディレクトリphp-fpmを所有します。

ユーザーwww-dataでコンパイルされているため。

Ref-

https://github.com/docker-library/php/blob/57b41cfc2d1e07acab2e60d59a0cb19d83056fc1/7.0/jessie/fpm/Dockerfile

19
vivekyad4v

私は同様の問題を発見し、私はそれを修正しました

chown -R www-data:www-data /var/www

chmod -R 755 /var/www/storage

Dockerでバインドマウントを使用する場合、Dockerホストの元の権限はコンテナーに保持されます。これにより、コンテナ内で使用する適切な権限をDockerホストに設定できます。

まず、nginxのuidgidを見つける必要があります。次に例を示します。

_docker-compose exec nginx id www-data_

このコマンドの出力は次のようになります。

uid=33(www-data) gid=33(www-data) groups=33(www-data)

次に、これらのuidgidを使用して、コンテナでも使用されるDockerホストのアクセス許可を設定する必要があります。そのため、Dockerホストで次のコマンドを実行します。

_Sudo chown -R 33:33 site_

今、すべてが機能している必要があります。

5
Hamid Mohayeji

私が使用したり使用したりすると、3つのことができます

  1. storageフォルダー(Sudo chmod 777 storage/ storage/*)に777権限を付与します
  2. RUN chown -R www-data:www-data /var/www RUN chmod 755 /var/www

  3. プロジェクトフォルダーを/homeに移動します。これは、そのディレクトリに書き込むための特別な権限を必要としません(個人的に推奨)(私の場合は/home/projects/とそれらのすべてがそこに置かれます)。


注:プロジェクトが/var/www/にある場合、ファイルアップロードを書き込んだ場合は、そのフォルダーへのアクセス許可も必要です。これにより、/homeに移動したときにこのようなエラーが回避されます

5
Abdulla Nilam

u laravelフォルダーを右クリックし、プロパティをクリックしてからアクセス許可を選択し、「グループ」フィールドから「docker」を選択し、「docker」グループに必要なアクセス許可を与えることができます:) thats私のために働く

0
rogal127