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"を開けませんでした:ストリームを開けませんでした:許可が拒否されました
私の理解では、ストレージフォルダーはウェブサーバーによって書き込み可能である必要があります。
これを解決するにはどうすればよいですか?
以下のように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-
私は同様の問題を発見し、私はそれを修正しました
chown -R www-data:www-data /var/www
chmod -R 755 /var/www/storage
Dockerでバインドマウントを使用する場合、Dockerホストの元の権限はコンテナーに保持されます。これにより、コンテナ内で使用する適切な権限をDockerホストに設定できます。
まず、nginxのuid
とgid
を見つける必要があります。次に例を示します。
_docker-compose exec nginx id www-data
_
このコマンドの出力は次のようになります。
uid=33(www-data) gid=33(www-data) groups=33(www-data)
次に、これらのuid
とgid
を使用して、コンテナでも使用されるDockerホストのアクセス許可を設定する必要があります。そのため、Dockerホストで次のコマンドを実行します。
_Sudo chown -R 33:33 site
_
今、すべてが機能している必要があります。
私が使用したり使用したりすると、3つのことができます
storage
フォルダー(Sudo chmod 777 storage/ storage/*
)に777権限を付与しますRUN chown -R www-data:www-data /var/www RUN chmod 755 /var/www
プロジェクトフォルダーを/home
に移動します。これは、そのディレクトリに書き込むための特別な権限を必要としません(個人的に推奨)(私の場合は/home/projects/
とそれらのすべてがそこに置かれます)。
注:プロジェクトが/var/www/
にある場合、ファイルアップロードを書き込んだ場合は、そのフォルダーへのアクセス許可も必要です。これにより、/home
に移動したときにこのようなエラーが回避されます
u laravelフォルダーを右クリックし、プロパティをクリックしてからアクセス許可を選択し、「グループ」フィールドから「docker」を選択し、「docker」グループに必要なアクセス許可を与えることができます:) thats私のために働く