プロキシ環境下にあるWindows11(22H2)でLaravel Sailを使おうとしたらあれこれとエラーが起きたので、その対処に実施した操作の記録です。簡単に使えると聞いてたのにあれこれとエラーが出まくりで苦労した。
WSLが起動しない
WSLを起動しようとすると次の様なエラーメッセージが表示されて起動できませんでした。
ファイル システムの 1 つをマウント中にエラーが発生しました。詳細については、「dmesg」を実行してください。
以下の記事を参考にアップデートをかけてみました。
実行したコマンドは以下2つです。
wsl --shutdown
wsl --update
WSLがまだ起動しない
再度実行しようとすると今度は以下の様な違うエラーメッセージになりました。
Processing fstab with mount -a failed.
<3>WSL (8) ERROR: CreateProcessEntryCommon:358: getpwuid(0) failed 2
<3>WSL (8) ERROR: CreateProcessEntryCommon:362: getpwuid(0) failed 2
<3>WSL (8) ERROR: CreateProcessEntryCommon:570: execvpe /bin/sh failed 2
<3>WSL (8) ERROR: CreateProcessEntryCommon:579: Create process not expected to return
こちらの記事を参考にUbuntuをインストールし既定のディストリビューションとしてみました。
実行したコマンドは以下3つです。3つ目はただの確認です。
wsl --install ubuntu
wsl --set-default Ubuntu
wsl --list
wslが起動するようになりました。
Dockerが認識できない
次のコマンドでSail込みでLaravelがインストールされるはずです。
curl -s https://laravel.build/example-app | bash
しかし次のメッセージが表示されてしまいました。
Docker is not running.
以下サンプル画像ではプロキシを指定しています。
こちらの記事を参考にDocker DesktopでWSL INTEGRATIONの画面を開き、Ubuntuを有効にして再起動しました。
コンテナがビルド出来ない
さっきのコマンドをまた実行すると今度はコンテナのビルド中に以下の様になんかのダウンロードに失敗したメッセージが表示されました。
Creating a "laravel/laravel" project at "./example-app"
https://repo.packagist.org could not be fully loaded (curl error 7 while downloading https://repo.packagist.org/packages.json: Failed to connect to repo.packagist.org port 443: Connection refused), package information was loaded from the local cache and may be out of date
In CurlDownloader.php line 365:
curl error 7 while downloading https://repo.packagist.org/p2/laravel/laravel.json: Failed to connect to repo.packagist.org port 443: Connection refused
またどうせプロキシのせいだろうとcurlで落としてきているスクリプトを一旦ファイルに保存し中身を以下の様にプロキシの設定を追加しました。(9~10行目)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# Ensure that Docker is running... if [ $? -ne 0 ]; then echo "Docker is not running." exit 1 fi docker run --rm \ --env http_proxy=http://192.168.0.250:8080 \ --env https_proxy=http://192.168.0.250:8080 \ --pull=always \ -v "$(pwd)":/opt \ -w /opt \ laravelsail/php82-composer:latest \ bash -c "laravel new example-app && cd example-app && php ./artisan sail:install --with=mysql,redis,meilisearch,mailpit,selenium " cd example-app ./vendor/bin/sail pull mysql redis meilisearch mailpit selenium ./vendor/bin/sail build CYAN='\033[0;36m' LIGHT_CYAN='\033[1;36m' BOLD='\033[1m' NC='\033[0m' echo "" if sudo -n true 2>/dev/null; then sudo chown -R $USER: . echo -e "${BOLD}Get started with:${NC} cd example-app && ./vendor/bin/sail up" else echo -e "${BOLD}Please provide your password so we can make some final adjustments to your application's permissions.${NC}" echo "" sudo chown -R $USER: . echo "" echo -e "${BOLD}Thank you! We hope you build something incredible. Dive in with:${NC} cd example-app && ./vendor/bin/sail up" fi |
まだ出来ない
./vendor/bin/sail upコマンドを実行するとまたもやエラー。sailのDockerfileにもプロキシ設定が必要っぽい。以下のコマンドを実行するとLaravelプロジェクトのルートフォルダにdockerというフォルダが作られる。
vendor/bin/sail artisan sail:publish
その中を辿るとDockerfileがあるので同様にプロキシの設定を追加する。
docker/8.2/Dockerfile
こんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
FROM ubuntu:22.04 LABEL maintainer="Taylor Otwell" ARG WWWGROUP ARG NODE_VERSION=18 ARG POSTGRES_VERSION=14 WORKDIR /var/www/html ENV http_proxy=http://192.168.0.250:8080 ENV https_proxy=http://192.168.0.250:8080 ENV DEBIAN_FRONTEND noninteractive ENV TZ=UTC RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ~以下略~ |
出来た
以下コマンドでやっと動くようになりました。
.vendor/bin/sail up -d
http://localhost/にアクセスするとLaravelの画面が表示されました。
最後に
このやり方が正しいか分からないけどSailって簡単に使えるはずなのにめちゃくちゃ大変だと思いました。