45
49

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.

LaravelをDockerで開発している際におこるPermission Deniedを回避する

Posted at

LaradockではなくLaravelをDockerでローカル開発している際にPermission Deniedで/storage/logsの書き込みが失敗する事象が見られた。
この際の回避方法を残しておきます。

おそらくPermission Deniedになる原因はホストとクライアントとでUID、GIDが異なることで発生する。
docker-composeにより構成はNginx > php-fpmとしている場合以下のようにphp-fpm側のDockerfileにNginxのユーザーであるwww-dataに対して任意のUID、GIDが指定できるようにしておく。

Dockerfile
ARG PUID=1000
ARG PGID=1000

RUN echo "-> $PUID"
RUN echo "-> $PGID"

RUN groupmod -o -g $PGID www-data && \
    usermod -o -u $PUID -g www-data www-data

これをdocker-compose build時に自身のMacのUID、GIDをを差し込む。

$ docker-compose build --build-arg PUID=$(id -u) --build-arg PGID=$(id -g) app

これで無事ホストとクライアントのUID、GIDが同じになった。

おまけ

Makefileで上記のコマンドを設定していると$(id -u)が正しく解決できなかった。
以下のように書くとうまくいく

Makefile
build_app:
	$(eval UID := $(shell id -u))
	$(eval GID := $(shell id -g))
	@docker-compose build --build-arg PUID=$(UID) --build-arg PGID=$(GID) app
45
49
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
45
49

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?