LoginSignup
0
0

More than 3 years have passed since last update.

Laravel用とは別のDockerfileで事前に作ったcomposerのimageを、Laravelにcopyしてきて使おうとしてPermission deniedが起きた場合の解決方法

Last updated at Posted at 2021-03-20

何があった?

題名の通り、事前にcomposer専用imageを作り、それをLaravelのbuildに組み込もうとしたらPermission deniedが起きました。
Dockerfileとエラーはそれぞれ下記のようになっていました。

Dockerfile(composer)

FROM php:7.4-fpm

WORKDIR /usr/local/bin/composer

RUN apt-get update && apt-get install -y \
git \
zip \
unzip \
&& curl -sS https://getcomposer.org/installer | php 

Dockerfile(Laravel)

FROM php:7.4-fpm

COPY ./src /var/www/html

WORKDIR /var/www/html

COPY --from=composer:latest /usr/local/bin/composer /usr/local/bin/composer

RUN apt-get update && apt-get install -y \ 
git \
zip \
unzip \
&& composer install

RUN php artisan cache:clear \
&& php artisan config:clear \
&& php artisan route:clear \
&& php artisan view:clear

RUN chown -R www-data:www-data storage

エラー

% docker-compose build #buildコマンドを叩いた
mysql uses an image, skipping
nginx uses an image, skipping
Building php
[+] Building 171.6s (12/14)
 => [internal] load build definition from Dockerfile                                                                                                                            0.0s
〜成功部分は省略〜
#10 175.1 Processing triggers for libc-bin (2.28-10) ...
#10 175.1 /bin/sh: 1: composer: Permission denied #ここでエラーが発生し中断
------
executor failed running [/bin/sh -c apt-get update && apt-get install -y git zip unzip && composer install]: exit code: 127
ERROR: Service 'php' failed to build
#↑エラー文
%

原因

今回の件はPermission deniedは根本原因ではなく、composerコマンドが使えない状態でcomposerのimageを作成してしまったことが真の原因でした。
(エラー文だけ見るとchmod -R a+x /usr/local/bin/composerのような権限コマンドをDockerファイルに書き込めば直るように見えてしまいますが、それをしても解決に至りません。 )
ちなみにPermission deniedはcomposerコマンドがないため、/bin/sh の中からコマンドを探そうとしたとき権限で弾かれたときのものだと予想されます。

解決方法

Dockerfile(composer)のディレクトリとファイル名を使用できるようにmvコマンドを下記のように追記し、その後composerのimageを作り直してから再度Laravelのbuildを行うことで無事buildを行うことができました。

Dockerfile(composer)

FROM php:7.4-fpm

WORKDIR /var/www/html #不要なディレクトリを作らないように変更した

RUN apt-get update && apt-get install -y \
git \
zip \
unzip \
&& curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer #追記した

参考にさせていただいた記事

0
0
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
0
0