Docker 更換掛載點:將 immich 資料搬遷到外接 SSD
docker 更換掛載點其實非常方便,倒不如說這部分就是 docker 會那麼好用的其中一個重要因素。一般來說,我們只要在 docker-compose.yml 中把 volumes 欄位設定一下,重新運行,一切就會像沒事人一樣,無痛搬家。
隨便拿一個簡單的 docker-compose 來看:
1 | services: |
我們可以看到在 volumes 跟 ports 裡面都有著 host:container 這種格式的寫法。在 volumes 中,這就表示你的容器會直接把宿主的 ./config 當成 /app/config 來取用。而在 ports 中,你的容器會把宿主的 5678 port 當成自己的 8080 port 來用。
按照這個邏輯,我們來看一下 immich 的 docker-compose:
1 | name: immich |
其中的 ${UPLOAD_LOCATION}:/usr/src/app/upload 跟 ${DB_DATA_LOCATION}:/var/lib/postgresql/data 就是我們此次要下手的部分。
在下手之前,我們用 docker compose down 先行停機。
然而 ${UPLOAD_LOCATION} 是環境變數的寫法(為了不要然你直接修改 docker-compose 造成損壞),所以我們要在同資料夾的 .env 中編輯:
1 | # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables |
以我為例,我就把這兩個資料夾分別改成 /mnt/apacer/immich-data/library 跟 /mnt/apacer/immich-data/postgres,是我 SSH 掛載的位置。
接著透過 rsync 來移動資料:
1 | sudo rsync -av ./library/ /mnt/storage/immich/library/ |
至此設定完成,用 docker compose up -d 來讓 immich 上線。
因為 immich 會去讀取 UPLOAD_LOCATION 所在位置的儲存空間,重新上線之後,剩餘磁碟空間就會是我們新家的資訊咯。
以上!


