【Laravel8】WindowsでLaravel Sailを使用してdocker環境構築する方法

2021年12月3日Laravel

スポンサーリンク

Laravel8からLaravel SailというLaravel+Dockerの開発環境を簡単に作れるインターフェース?だかができたらしいので、さっそく使ってみようと思い、Windowsで試したらエラーが出て躓いた。
どうやらWindowsでやるには一癖あるようなので、解決方法を記載しておきます。

※Docker Desktop for WindowsとWSL2はインストールしている状態。
Docker Desktop for Windows インストール方法 https://docs.docker.jp/docker-for-windows/install.html
WSL2 インストール方法 https://docs.docker.jp/docker-for-windows/wsl.html

エラー内容

とりあえず以下のコマンドを打てば一発でLaravelとDocker環境を構築できるらしいので実行した。

curl -s https://laravel.build/example-app | bash

Git Bashの結果

$ curl -s https://laravel.build/example-app | bash
docker: Error response from daemon: the working directory 'C:/Program Files/Git/opt' is invalid, it needs to be an absolute path.
See 'docker run --help'.
bash: line 16: cd: example-app: No such file or directory

Please provide your password so we can make some final adjustments to your application's permissions.

bash: line 31: sudo: command not found

Thank you! We hope you build something incredible. Dive in with: cd example-app && ./vendor/bin/sail up

Git Bashじゃダメかと思い、

PowerShellで実行

PS C:\work\tmp> curl -s https://laravel.build/example-app | bash

コマンド パイプライン位置 1 のコマンドレット Invoke-WebRequest
次のパラメーターに値を指定してください:
Uri:

よくわからん。

コマンドプロンプトで実行

c:\work\tmp>curl -s https://laravel.build/example-app | bash
Docker is not running.

Docker Desktopは確実に起動させているのに"Docker is not running."となる。

解決方法

Windows Subsystem for Linux 2(WSL2)上でコマンドを実行しないといけない。
そのためにはちょっとひと手間必要。

1.Miicrosoft Storeから以下のUbuntuをインストールする。Microsoft Storeから直接"Ubuntu"で検索しても良い。

https://www.microsoft.com/store/productId/9NBLGGH4MSV6

2.インストール後、"開く"を押下

3.Ubuntuを立ち上げるためのusernameやpasswordを聞かれるので任意の値を入れる。

4.これで以下のような感じでUbuntuがWindows上で使えるようになった。

5.試しにここで例のコマンドを打ってみてもダメ。
 ※WindowsのCドライブはUbuntuの/mnt/cにマウントされているので以下のように移動できる。

ton@MyComputer:~$ cd /mnt/c/work/tmp
ton@MyComputer:/mnt/c/work/tmp$ curl -s https://laravel.build/example-app | bash
Docker is not running.
ton@MyComputer:/mnt/c/work/tmp$

6.とりあえず、Ubuntuのインストールは成功したので上記のシェルは閉じていい。

7."wsl –list –verbose"のコマンドをPowerShellなどで打って、先ほど入れたUbuntuのVERSIONが2であることを確かめる。(このVERSIONはWSLのバージョンのこと)

PS C:\work\tmp> wsl --list --verbose
  NAME                   STATE           VERSION
* docker-desktop         Running         2
  Ubuntu                 Stopped         2
  docker-desktop-data    Running         2
PS C:\work\tmp>

7-1.もし、上記でVERSIONが1であれば、"wsl –set-version Ubuntu 2″のコマンドで2にする。

PS C:\work\tmp> wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
ディストリビューションは既に、要求されているバージョンです。
PS C:\work\tmp>
PS C:\work\tmp> wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
仮想ディスク システムの制限により、要求された操作を完了できませんでした。仮想ハード ディスク ファイルの圧縮と暗号化が解 除されている必要があります。また、仮想ハード ディスク ファイルをスパースに設定することはできません。
PS C:\work\tmp>

以下のパスの"CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc"フォルダのプロパティを開く

C:\Users\%username%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc

詳細設定を押下し、「内容を圧縮してディスク領域を節約する(C)」のチェックを外す。

OKを押下して完了

そしてもう一度コマンドを打つと今度は成功するはず。

7-2.インストールした際の既定のバージョンを"wsl –set-default-version 2″で2にしておくと便利

PS C:\work\tmp> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
この操作を正しく終了しました。
PS C:\work\tmp>

8.7のコマンドで見たように現在の既定のディストリビューションは"docker-desktop"なので"wsl –set-default Ubuntu"のコマンドを打って、Ubuntuを既定にする。
※NAME列の左に「*」がついているディストリビューションが既定という意味。
※このようにUbuntuを既定のディストリビューションにしておかないとうまく実行できなかった。

PS C:\work\tmp> wsl --set-default Ubuntu
PS C:\work\tmp> wsl --list --verbose
  NAME                   STATE           VERSION
* Ubuntu                 Stopped         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2
PS C:\work\tmp>

準備完了!いざ実行

これでついに"curl -s https://laravel.build/example-app | bash"が成功します!!
やり方は複数あるのでいくつか紹介。

その1:PowerShellから実行

LaravelをインストールしたいフォルダでPowerShellを開き、"wsl"と打ち込み、Ubuntuの中に入り、例のコマンドを打つとできる。

PS C:\work\tmp2> wsl
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ton@MyComputer:/mnt/c/work/tmp2$ curl -s https://laravel.build/example-app | bash

 _                               _
| |                             | |
| |     __ _ _ __ __ ___   _____| |
| |    / _` | '__/ _` \ \ / / _ \ |
| |___| (_| | | | (_| |\ V /  __/ |
|______\__,_|_|  \__,_| \_/ \___|_|

Warning: TTY mode requires /dev/tty to be read/writable.
    Creating a "laravel/laravel" project at "./example-app"
    Installing laravel/laravel (v8.6.8)
      - Downloading laravel/laravel (v8.6.8)
// 以下省略

その2:Shift+右クリックメニューの"Linux シェルをここに開く(L)"から実行

LaravelをインストールしたいフォルダでShift+右クリックをすると以下のように"Linux シェルをここに開く(L)"というメニューが出るので、これを押下。

すると以下のように一発でUbuntuの中の対象のディレクトリに入るので例のコマンドを打つ!
※その2のPowerShell上でやったwslを省略できるという感じ。

その3:コマンドプロンプトで実行(おすすめしない)

単純にコマンドプロンプトを開いて、Laravelをインストールしたいフォルダに移動して、コマンドを打つ!
※Ubuntuを入れる前は"Docker is not running."だったけど、ちゃんとインストールされるようになった。
※よくわかんないけど「その1や2」のようにUbuntu内に入らなくてもできる。
※でもLaravelインストール後の"./vendor/bin/sail up"コマンドはUbuntu内に入ってからじゃないとうまくできないので、結局はその1か2の方法でやった方が良さそう。

まとめ

こんな感じでひと手間必要だけど、うまくできました!!

Laravel

Posted by ton