Dockerって環境構築が簡単に行えてすごく便利ですよね。
特にデータベースとかわざわざインストールしなくてもできてしまいますもんね。
そんなDockerでcomposer
を使ってあるものをインストールしようとしたのですが、下記のようなエラーが起きました。
bash: composer: command not found
Dockerのコンテナ外ではcomposer
コマンドを打てるのですが、コンテナ内では打てませんでした。
結論から言いますと、Dockerのイメージをビルドするときにcomposerをインストールすれば解決します。
Dockerのphpを構築するDockerfile
で以下の記述を加えて下さい。
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php composer-setup.php \
&& php -r "unlink('composer-setup.php');" \
&& mv composer.phar /usr/local/bin/composer
一応僕のDockerfile
のコードを載せておきますね。
FROM php:7.4-fpm-buster
COPY ./backend /work
COPY ./docker/php/php.ini /usr/local/etc/php/php.ini
LABEL maintainer="ucan-lab <info@u-can.tech>"
SHELL ["/bin/bash", "-oeux", "pipefail", "-c"]
# tinker(psysh)
ARG PSYSH_DIR=/usr/local/share/psysh
ARG PSYSH_PHP_MANUAL=$PSYSH_DIR/php_manual.sqlite
ARG PHP_MANUAL_URL=http://psysh.org/manual/ja/php_manual.sqlite
# timezone
ARG TZ=Asia/Tokyo
# composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
RUN apt-get update && \
apt-get -y install git unzip libzip-dev libicu-dev libonig-dev libjpeg-dev libpng-dev libfreetype6-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
docker-php-ext-install intl pdo_mysql zip bcmath && \
docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ && \
docker-php-ext-install gd
# Install Composer
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
&& php composer-setup.php \
&& php -r "unlink('composer-setup.php');" \
&& mv composer.phar /usr/local/bin/composer
# Install Node.js
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - \
&& apt-get update \
&& apt-get install -y nodejs
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN apt-get install -y cron
こんな感じでコンテナ内に入り、composer -V
と打ちバージョンが返ってくれば成功です。
以上、「Dockerで作成したLaravelで「bash: composer: command not found」と出たときの対処法」でした!
Thank you for reading