ひでメモ

プログラムについて勉強したことを書きます。たぶん。

Laravel Sail 環境で Sail をインストールする前だとイメージのビルドができない

Sail インストール前だと Docker イメージのビルドがこける

これは開発環境の初期構築時のみに発生する問題です。
Laravel Sail 環境で Sail 本体がインストール前、つまり composer install 実行前だと以下のようなエラーが出て Docker イメージのビルドが失敗してしまいました。

 => ERROR [ 7/14] RUN groupadd --force -g  sail                                                                                                        0.3s
------
 > [ 7/14] RUN groupadd --force -g  sail:
#0 0.301 groupadd: invalid group ID 'sail'
------
failed to solve: executor failed running [/bin/sh -c groupadd --force -g $WWWGROUP sail]: exit code: 3

じゃあ先に composer install すれば良いのでは?
となるのですが、この場合ローカルで実行することになります。(コンテナが立ち上がってないので当たり前ですね)

すると、該当するバージョンの PHP をローカルにインストールする必要が発生します。
そもそも、そんな風にバージョンを気にしなくて良くするのがコンテナなのでは…?と思ったりしたので調べてみると割とすぐに対応できました。

対処:環境変数をセットしよう

エラーを見てみると$WWWGROUPという環境変数がセットされていないため groupadd コマンドが失敗してしまっているようです。

じゃあセットしましょう。ということで以下のコマンドで事前に実行しておけば問題なく通りました。

export WWWGROUP=${WWWGROUP:-$(id -g)}

あとはいつも通りコンテナを立ち上げてから中に入りcomposer installを実行することで Sail をインストールすることができました!

コマンドの出どころ

vendor/laravel/sail/bin/sail内に同じコマンドがあります。

github.com

sail コマンド実行時にセットしているのと同じ値を環境変数にセットしています。