by Devin Yang

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

前言

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

需要登入才可留言!

類似的文章


docker,phpenv

用光了Docker IPv4 address pool問題解法

可能在舊版的docker環境,使用Docker compose啟動容器時,會碰過下方的錯誤:

 Error response from daemon: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network這其實這是default-address-pools用光的症狀,有些環境,docker-compose預設會使用Class B的私有網路。172段的私有IP是有範圍的,從172.16.0.0到172.31.255.255。也就是說,當我們起動一個docker-compose的Project,就會吃掉一個Class B的私有段,非常豪邁,

d-laravel,docker

D-Laravel v1.2.1版變更說明(建議更新,必免踩雷)

D-Laravel v1.2.1版修正說明 use GuzzleHttp\Client; 進行post時.出現存取被拒的問題。 如果您是由舊版升級,您可能需調整etc/default-ssl.conf的設定檔 (如果有該檔) 請調整php:9000變更為web:9000,你可以透過執行一次./console secure調整。 docker-compose設定檔部份,PHP-FPM container變更為network_mode: "service:web"...