by Devin Yang

建立於: 8年前 ( 更新: 8年前 )

前言

CCC網站升級php 7.2.0囉,有Docker的環境,輕鬆搞定php升級,
在Linux上Image的變更還是有些注意事項您應該了解。
如果您跟我一樣透過docker將D-Laravel安裝於Linux的系統上,當您變更不同的image時,
或許您可能會碰到,疑!怎麼composer沒有權限寫入資料夾的錯誤。
directory is not writable

說明

在Linux的環境上,D-Laravel內建image的使用者並非root,預設的uid及gid為1000,
他極有可能與您Linux上所執行的使用者uid及gid是不同,您可以輸入id查看。
如果您Linux上的使用者uid及gid剛好為1000,那基本上執行D-Laravel不會有任何問題。
id command
但是當您的情況與我相同時,uid及gid並非1000,這會造成您Linux上使用者執行composer時,
無權限寫入dlaravel家目錄的情況,當您輸入composer update時,
會看見如下的錯誤: OK,這是正常現象,不要太警張。

directory is not writable
修正的方式非常簡單,說穿了就是變更dlaravel的uid及gid與您執行的Linux使用者的uid及gid相同即可。

如果您對Linux指令或Docker不熟,又或者您對Linux指令相當熟悉,只不過懶的調整。
D-Laravel開發目標,就是要讓不懂Docker或懂Docker的人,可以使用最簡單的方式搞定環境,
當然D-Laravel,已提供轉換的bash囉。

D-Laravel的修正方式:

我們可以使用D-Laravel提供的 ./console chowner 方式,輕鬆調整。
./console chowner 是怎麼辨到的呢,這裡我採用了一種非常粗暴而直接的方式,就是直接砍掉container內的dlaravel使用者
然後再依執行 ./console chowner 的使用者id及gid,
建立相同的dlaravel使用者在container內,然後變更dlaravel家目錄的權限。

夠粗暴吧,不過這確實有效的。
./console chowner
最新版的D-Laravel已不使用這種粗暴的方式變更使用者的uid及gid了,有更好的方式。
https://www.ccc.tc/article/dlaravel-release-v1.5.5

當我們透過 ./console chowner 重建了container內的dlaravel使用者後,
我們需要將變更,寫入資料寫到所使用的deivny/fpm的image中
由於呢docker-compose環境,執行down時,container會被移除,
所以我們必需將container的變更存入image的樣版,
這樣下次啟動產生對執行container才會是我們變更過的環境。

在這例子中,我使用的為php 7.2.0版,所以找出fpm的CONTAINER ID。
docker ps

然後進行commit及重啟。
commit
完成後,進入container內,再來跑看看 composer update

您可以看見,變更權限後可以正常更新囉,composer不會再抱怨沒權寫入加目錄了。
composer update

如果您對於D-Laravel使用上有什麼疑問,歡迎到聊天室留言哦。

Tags: docker

Devin Yang

文章內容無法一一說明,如果您有什麼不了解處,歡迎提問哦:)

No Comment

Post your comment

需要登入才可留言!

類似的文章


laravel docker

關於D-Laravel的專案模式

如果您是新使用者,建議您改用我的最新環境phpenv。https://github.com/DevinY/phpenv

docker,laravel

[D-Laravel]./console node

進行Laravel開發時,有時我們會需要透過npm安裝nodejs的套件,但是偏偏我們系統中的Node又不夠新。 或許因某些因素沒法升級,例如要跑舊版的nodejs程式等。 其實我們可以透過簡單的指令,用docker,讓我們就能使用最新版本的node image來掛載host端的/sites資料夾囉。 這麼一來我們就可以隨時執行新版本的npm指令啦。

docker,container,laravel

在Nas上手動更新D-Laravel的使用者id全記錄

本文全記錄,紹我如何更新我家Nas上的fpm image的uid。 本文章中,您應該會學會查詢容器id及commit容器等相關概念。