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

需要登入才可留言!

類似的文章


docker

如何在Raspberry上用Docker啟動HAProxy

Raspberry很便宜有相當多的運用,例如有人拿來當Wifi的router, 遊戲機,監視器及許許多多物聯網相關運用,我則是用他來當一台HAProxy。 長話短說,因為有一台老舊的Windows伺服器,他執行舊版本的PHP及Apache,並且無法設定HTTPS憑證,所以就想說 透過HAProxy來幫忙啦。讓這台老舊伺服器也可以有https的網址, 所以來分享我的docker-compose.yml設。

docker

用樹莓派安裝Docker及docker-compose

本文簡單介紹我們如何在Raspberry Pi上安裝docker及docker-compose。

docker

[必學]在docker swarm環境必學iptabels的使用

首先Docker在Linux的環境下,Docker使用iptables規則來提供網路隔離。然而在Docker swarm mode的環境下,我們是沒辨法把連接埠開在host的127.0.0.1下的,這時便可透過iptables中的DOCKER-USER chain來自訂規則囉 。