建立於: 3年前 ( 更新: 3年前 )
這是我在自己的Nas上手動變更fpm owner的全記錄。
一、首先下載我要使用的最新image,本文中7.4.13是我想使用的新版本php。
二、進入D-Laravel的目錄,並修改docker-compose.yml的php服務採用最新的php(deviny/fpm:7.4.13)版。
三、在yaml檔中,修改容器服務php的段落,調整到剛下載的fpm版本。
四、存檔後離開,進行容器重啟,這時就是跑新版本的php囉。
可以用docker-compose移除再啟動,或是D-Laravel提供的bash進行。
為何要換掉他,因為我是用NAS上的admin帳號執行的,這會造成php無權限寫入容器資料夾,所以我要換成與admin相同的uid (1024)。
五、如何查詢自己的uid是什麼呢,執行id即可。
或者,我想變更其他使用者的uid,也能用id指令查詢。
六、調整etc/php-fpm.d/www.conf權限
七、在開始調整容器uid前,我們可以再一次確認,容器php服務是啟動中的。
也能用docker-compose的指令查看,port 9000即是php fpm的服務囉,狀態為Up代表著容器運作中。
不運作我們怎麼變更容器內的權限是吧? :)
八、重頭戲來了,因為容器是Up的,所以我們就能在host端,執行容器內的指令,下指令調整容器內的使用者uid、gid及家目錄的權限啦,指令如下:
九、完成調整後,記得保存(commint)我們變更的容器,我們可以透過下方指令取得運作中的容器id。
在下方的實際執行畫面中,我故意用./console跟docker-compose各執行一次。
十、接續上個步驟,我的容器id是47fcd589fc2b,這裡我自已定了一個新名稱admin/fpm:7.4.13。
執行下方指令後,就能建立一個新的image,並且內容是我們調整過uid及gid的image囉。
十一、完成後,記得修改我們自己的docker-compose.yml使用修改後的image。
十二、變更完新版本的image後,重啟並驗證容器內的uid是否變更了。
備註,您容器中的/tmp目錄,會保存了舊的PHP SESSION,您需要用root的身份登入容器中,清空再commit一次容器。
這些舊的session是uid 1000會造成新的admin權限為1024沒法寫入變更,所以需要清掉舊的session,如果在調整過程中已有使用者登入了網站。
一、使用root的身份登入php的容器
三、執行完調整後,記得再commit一次變更的版本。
我們可以隨傳弄個檔案到public的目錄上測看看 實際操作畫面:
開開網頁來看看,是1024非原來的100了。
一、首先下載我要使用的最新image,本文中7.4.13是我想使用的新版本php。
docker pull deviny/fpm:7.4.13
實際畫面如下:二、進入D-Laravel的目錄,並修改docker-compose.yml的php服務採用最新的php(deviny/fpm:7.4.13)版。
cd /volume1/docker/dlaravel
vi docker-compose.yml
操作畫面(我使用vi編輯器):三、在yaml檔中,修改容器服務php的段落,調整到剛下載的fpm版本。
### PHP-FPM container ##################################
php:
image: deviny/fpm:7.4.13
volumes:
實際畫面如下:四、存檔後離開,進行容器重啟,這時就是跑新版本的php囉。
可以用docker-compose移除再啟動,或是D-Laravel提供的bash進行。
./console restart
#我們也能使用docker-compose指令重啟,結果等同於上方的指令,意思一樣的:
#docker-compose down --remove-orphans
#docker-compose up -d
重啟完成後,我們執行指令查看。會看到容器運行的使用者是1000,這是D-Laravel預設的使用者uid。為何要換掉他,因為我是用NAS上的admin帳號執行的,這會造成php無權限寫入容器資料夾,所以我要換成與admin相同的uid (1024)。
admin@CCC:/volume1/docker/dlaravel$ docker-compose exec php id
uid=1000(dlaravel) gid=1000(dlaravel) groups=1000(dlaravel)
五、如何查詢自己的uid是什麼呢,執行id即可。
admin@CCC:/volume1/docker/dlaravel$ id
uid=1024(admin) gid=100(users) groups=100(users),0(root),101(administrators)
實際操作畫面:或者,我想變更其他使用者的uid,也能用id指令查詢。
admin@CCC:/volume1$ id -u devin
1027
像上方顯示,devin的uid是1027。六、調整etc/php-fpm.d/www.conf權限
user = 1024
group = 100
我的檔案內容,抓圖如下:七、在開始調整容器uid前,我們可以再一次確認,容器php服務是啟動中的。
./console ps
#或者,也可用docker-compose查php/fpm權限是否啟動。
docker-compose ps php
實際操作執行畫面:也能用docker-compose的指令查看,port 9000即是php fpm的服務囉,狀態為Up代表著容器運作中。
不運作我們怎麼變更容器內的權限是吧? :)
八、重頭戲來了,因為容器是Up的,所以我們就能在host端,執行容器內的指令,下指令調整容器內的使用者uid、gid及家目錄的權限啦,指令如下:
#容器中使用者的uid
docker-compose exec -uroot php usermod -u 1024 dlaravel
#容器中使用者的gid
docker-compose exec -uroot php usermod -g 100 dlaravel
#容器中目錄權限
docker-compose exec -uroot php chown -R 1024 /home/dlaravel
在上方的指令中,1024是我的admin的uid,您應依據你想變更的uid進行調整。九、完成調整後,記得保存(commint)我們變更的容器,我們可以透過下方指令取得運作中的容器id。
docker ps|grep php
#或是docker-compose指令
docker-compose exec php hostname
取得容器id可以用D-Laravel提供的./console指令,也可以用dockr-compose,執行的結果是相同的。在下方的實際執行畫面中,我故意用./console跟docker-compose各執行一次。
十、接續上個步驟,我的容器id是47fcd589fc2b,這裡我自已定了一個新名稱admin/fpm:7.4.13。
執行下方指令後,就能建立一個新的image,並且內容是我們調整過uid及gid的image囉。
docker commit 47fcd589fc2b admin/fpm:7.4.13
十一、完成後,記得修改我們自己的docker-compose.yml使用修改後的image。
十二、變更完新版本的image後,重啟並驗證容器內的uid是否變更了。
#重啟
./console restart
#進入容器內
./console
#檢查容器使用者id
id
十三、您看看,容器中的dlaravel uid已由1000變更為我們指定的1024囉:)。備註,您容器中的/tmp目錄,會保存了舊的PHP SESSION,您需要用root的身份登入容器中,清空再commit一次容器。
這些舊的session是uid 1000會造成新的admin權限為1024沒法寫入變更,所以需要清掉舊的session,如果在調整過程中已有使用者登入了網站。
一、使用root的身份登入php的容器
admin@CCC:/volume1/docker/dlaravel$ docker-compose exec -uroot php bash
root@0d7682041752:/var/www/html#
二、清除/tmp下,所有uid為1000的檔案,因為在這裡我新的uid是1024了,不是預設的1000啦。
find /tmp -uid 1000 -name sess* -exec rm -f {} \;
#或者不希望任何session被commit,無差別清除,直接全清行,所有使用者會被登出,反正也想重啟容器啦:)。
rm -rf /tmp/sess*
三、執行完調整後,記得再commit一次變更的版本。
我們可以隨傳弄個檔案到public的目錄上測看看 實際操作畫面:
開開網頁來看看,是1024非原來的100了。
No Comment
Post your comment