從 Docker Desktop 換到 Podman 1 ,開始需要處理某些相容性問題。有些問題不見得是 Podman 的錯,但既然遇到了,就順手記錄一下除雷經驗。

此文記錄一下在 Podman 執行 Laravel 9 欽定開發環境 Sail 的步驟。

前置作業:安裝 Podman

如果你是 Linux 用戶,請依照 Podman 官方文件所載步驟安裝 Podman。

如果你是 Windows 用戶,請根據〈WSL2 + Podman + K3s 組合技〉一文安裝 WSL2 + Podman。

如果你是 Mac 用戶,請先用 brew install podman 來安裝。但據說 multipass + Podman 方案更好,我會再找時間實驗。

前置作業:Podman daemon mode

Laravel 的 Sail 需要用到 Docker Compose,而且它的 docker-compose.yml 又寫得⋯⋯很需要是以 daemon mode 運作的 container engine。

所以,請根據〈Podman Tips〉一文的步驟,啟動一個 daemon mode 的 Podman。

前置作業:解決 Composer 連線問題

有些人在透過 Composer 安裝套件的過程中,會出現 repo.packagist.org 連線 timeout 的問題:

curl error 28 while downloading https://repo.packagist.org/packages.json:
    Connection timed out after 10000 milliseconds

請參考這篇解法,將 repo.packagist.org 的 IPv4 位址直接寫死到 /etc/hosts

% dig +short repo.packagist.org

% echo "`dig +short repo.packagist.org` repo.packagist.org" >> /etc/hosts

如果你是身處 WSL2 環境,也請順便編輯一下 WSL 的設定檔 /etc/wsl.conf 以避免設定消失:

[network]
# Disable auto-gen /etc/hosts
generateHosts = false

安裝 Sail

請依照 Laravel 官方文件所載步驟,安裝一整套 PHP + Composer + Laravel + Sail + blah blah blah 本地開發環境,也順便建立一個名為 “example-app” 的新專案:

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

修改 Sail 產生的專案設定

透過 Laravel + Sail 產生的專案,預設會跑在 port 80。我建議修改到其他 unprivileged port 以減少問題。

請在專案的 .env 檔案添加這一行:

APP_PORT=3001

透過 Laravel + Sail 產生的專案,storage 目錄可能會有存取權限的問題。請參考這篇解法

% chmod o+w ./storage/ -R

或是保守一點:

% chmod o+w ./storage/logs/       -R
% chmod o+w ./framework/cache/    -R
% chmod o+w ./framework/sessions/ -R
% chmod o+w ./framework/views/    -R

執行 Sail

請依照 Laravel 官方文件所載步驟,執行 “example-app” 專案:

% cd example-app

% ./vendor/bin/sail up

如果一切順利,可以用瀏覽器看到 http://localhost:3001/ 順利執行:

也順便看看整個 Laravel 產生的本地開發環境含有哪些東西:

  

  

僅以這篇文章示範,只要懂得排雷,Podman 足以勝任 Docker Desktop 的角色。


  1. 詳見〈WSL2 + Podman + K3s 組合技〉一文。 ↩︎