docker-compose 開發環境,如何建立 storage 的 symbolic link?

前言

團隊使用 docker-compose 建立開發環境,方便前端工程師在不安裝 PHP 及 MySQL 的情況下也可以進行基於 Laravel framework 的專案開發。
但問題剛好發生在使用 Laravel File Storage 存放的圖片檔,無法通過 Browser 瀏覽。查到的原因是 storage 這個 symbolic link 的指向錯誤了。
目前找到的解法是手動進入到 docker 的 nginx container 後再建立。而不是直接使用 $ php artisan storage:link

操作步驟

  1. 移除工作目錄下的 public/storage 這個 symbolic link

  2. 找到 docker 的 nginx 容器 CONTAINER ID

    1
    2
    3
    $ docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    baba480659ee nginx:latest "nginx -g 'daemon ..." 16 minutes ago Up 16 minutes 0.0.0.0:80->80/tcp hpclaravelpaganinipluscom_web_1
  3. 進入 docker 的 nginx 容器

    1
    $ sudo docker exec -ti {CONTAINER ID} bash
  4. 在 docker 的 nginx 容器執行 symbolic link 的建立

    1
    $ ln -s /code/storage/app/public /code/public/storage
  5. 檢查建立的結果是否正確

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ ls -l
    drwxr-xr-x 13 root root 442 Nov 7 06:28 assets
    drwxr-xr-x 24 root root 816 Oct 26 04:08 css
    -rw-r--r-- 1 root root 5430 Oct 26 04:08 favicon.ico
    drwxr-xr-x 13 root root 442 Nov 7 04:49 images
    -rw-r--r-- 1 root root 1823 Sep 19 04:07 index.php
    drwxr-xr-x 6 root root 204 Oct 26 04:08 js
    -rw-r--r-- 1 root root 24 Sep 19 04:07 robots.txt
    lrwxrwxrwx 1 root root 24 Nov 7 06:31 storage -> /code/storage/app/public
    drwxr-xr-x 10 root root 340 Oct 26 04:08 vendor
    -rw-r--r-- 1 root root 914 Sep 19 04:07 web.config
    drwxr-xr-x 5 root root 170 Nov 7 01:32 yaml
  6. Browser 開啟圖片網站,例如

    1
    http://localhost/storage/4BWGjwW0p6iENjseaHZphhorGBUJTPkd888oiMNh.jpeg

參考資料 References