by Devin Yang

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

前言

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

需要登入才可留言!

類似的文章


certbot,docker,ftp

curlftpfs介紹及手動憑證申請

情境分享,設想您有WebHosting,他只提供FTP連線,然後您想手動的方式申請憑證。在本篇分享我如何使用Docker安裝curlftpfs,並且掛載遠端主機FTP資料夾,然後在容器內執行certbot申請SSL憑證。撇除憑證申請不說,我初次發覺到curlftpfs這個指令時,覺的滿有意思的,特別是如果你用的是MacOS用戶,手邊沒有一個滿意的FTP軟體時。您跟我一樣喜歡在命令列上打滾,或許您應該也會喜歡這個指令。🤭

docker,dlaravel

D-Laravel 1.5.5變更說明

D-Laravel的fpm image在php 7.2.1以前是使用docker php官方的dockerfile重build的, 並且所以我可以指定了fpm的預設的owner是dlaravel,   --with-fpm-user=USER    Set the user for php-fpm to run as. (default: nobody)   --with-fpm-group=GRP    Set the group for php-fpm to run as.

linux,docker,wifi

用docker建立WPA2/EAP企業用Radius驗證伺服器,後端使用mysql資料庫

AP提供了WPA2/EAP功能,但不會用嗎? 本文介紹我如何透過docker的ubuntu:21.04 image,極速建立Radius伺服器, 與Wifi的WPA2/EAP等相關運用。