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”で検索しても良い。
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の方法でやった方が良さそう。
まとめ
こんな感じでひと手間必要だけど、うまくできました!!
コメント
[…] 【Laravel8】WindowsでLaravel Sailを使用してdocker環境構築する方法 https://programming.sincoston.com/laravel8-windows-laravel-sail-construction/ […]