搜尋

搜尋結果

Docker 中的非管理員用户 Docker non-root user
科技新知
MacauYeah・2025-03-14

Container USER為何重要 在制作Docker Image的過程中,有時會接觸到 USER 這個設定。這事關到最後的 Docker Container內部運行的那個 user 到底會有什麼權限。大家也要知道,Docker Container 其實也只是一個 Linux 上的程序,也就是如果Container內權限過大,也有機會從 Container 內部存取到 Host上的資料。 一般情況下,Docker Image 預設的 USER 就是 root,最基礎的base image都是一樣。而我們想換,其實也相當簡單,就像Linux上起User一樣,只要經指令RUN adduser xxx 或RUN useradd xxx 也可以在 Docker Image 中創建帳號和 home 資料夾,之後就隨時經USER xxx來切換 實際上是不是這麼簡單 如果你將要Container中執行的程序,是一個binary,平常你在Linux中也是以 nonroot 方式執行,那麼是的,就是那麼簡單。例如你執行系統中的java, node, python,原本在Linux中就已經是誰都可以,那麼你的docker container 也應該沒有難度。 但如果原本的安裝包,預設是由system service來啟動,我們就要花點力氣,看看那個service是怎樣呼叫binary的,然後就一步一步模擬它的做法。例如筆者有打包的codeserver,預設是system service啟動,但它也有提共binary的執行方法,安定好home資料夾後,我們也可以手動啟動。 泛生之檔案權限問題 上述binary的情境之所以簡單,是因為大部份情況下,我們都只對於container 內部運行考慮即可,因為預設投產情況下的運作模式,都是隨時起、隨時刪、隨時砍掉重練,只要container內部運作可以自給自足,就可以了。Docker Swarm的運作也是如此,所以它不預期有的持久化資料權限的問題。 而持久化資料權限的問題,其實早在單個Linux伺服器就已經存在。同一個伺服器中,不同process就有不同的UID,當他們需要共同讀寫某些檔案,就會設定多人權限。同理,當多個Container要共同檔案,也是同樣問題。在討論共享檔案之前,我們先看看預設 Docker Storage Mount 會給我們什麼權限。 如果是bind mount,bind mount的權限預設會是Host內的檔案或者資料夾的權限。 如果Host是root,container內是nonroot,container有機會無法讀寫bind mount內的檔案。 留意權限設置就可以解決問題 如果Host是nonroot,但container 內是root,從container內生成的檔案,Host的nonroot user就無法使用。 Host是nonroot的話就一定無解,Host至少有sudo權限,臨時變成管理員,去修正問題。 如果host和container也是nonroot,但UID不夾,其實也不能交換使用。 跟上述一樣,最後要靠sudo來解決問題。 如果host和container也是root,就沒有權限問題,但就有安全性的風險。 如果是volume mount,就還是看看 mount path 是docker image layer中現有的 path還是新起的path 大部份手動建立的named volume都是root 經docker compose起的named volume滿足以下條件的話,將會是nonroot。 docker image 中的已有該path存在。 named volume未存在,docker compose會把對應path的內容在初次建立時抄到named volume 中。 例如ubuntu24.04中的homeubuntu,存在於docker image中,它的擁有者就是UID 1000,我們經docker compose HOME_VOLUMEhomeubuntu,在HOME_VOLUME建立時,就會是UID 1000。但如果是 NOT_EXISTShomeubuntusomethingNotExists,那麼NOT_EXISTS建立時,也會是root 上述討論的Storage mount是集中在單機情況下,使用HOST OS的本地儲存。若現在的場境是多機共享的share storage,就會更麻煩,還要看看那個share storage本身的屬性。例如常見的Linux NFS,其實有指定的權限,跟NFS的Login權限有關,如果你的process本身對檔案權限很敏感,就請先不要挑戰NFS例如postgresql。 Rootless mode Rootless 模式 Rootless 模式指的是在Host中,執行Container的使用者,不需要是管理員,筆者就常用於開發環境中。投產環境中反而沒有聽過這樣的討論,因為投產環境很少可以讓非管理員去執行這麼重要的環境管理。 雖然只是開發環境,但這像前述的bind mount討論中,如果Host是nonroot,但container 內是root,又或是兩者nonroot,但UID不夾,也會出現權限問題。無腦的將host user加入docker group,只可以讓非管理員可以運行docker,但解決不了權限問題。 真正有條件解決的,可能就會向linux subgroup的方式發展。暫時筆者用得比較順的rootless mode,可以無腦用的,不是docker,是podman。有興趣的朋友可以經podman官網看看教學,它給筆者的感覺就像是自動轉換UID。 podman rootless mode 想看更多 筆者已經將過去的文章重新整理成gitbook,有興趣睇更多的讀者,可以來筆者的gitbook再翻一翻 httpsmacauyeah.github.ioAProgrammerPrepares

超高CP值“德州美式煙燻烤肉”!親友聚會必食!
生活在我城
Cheers!・2024-10-30

小編作為識食之人,新濠天地頤居三樓嘅「御膳扒房」絕對係必打卡之地!自今年3月開幕以來,呢度成為咗家庭聚餐、朋友聚會、浪漫約會嘅理想之地,餐廳專注於烹調美式牛扒,將炭火扒房魅力提升至新境界。廚師利用來自美國喬治亞州嘅紅橡木煙燻,將每一塊扒都保留最純正嘅風味。而且,餐廳仲可以睇到路氹金光大道嘅靚夜景,絕對令你嘅用餐體驗更加完美! 餐廳資訊: 地址:澳門新濠天地頤居三樓 營業時間:星期二至星期日,晚上6時至10時30分(最後點餐時間晚上10時) 著裝要求:時尚休閒;男士禁穿涼鞋或無袖上衣 孩童政策:歡迎任何年齡賓客入座 查詢或訂座: 853 8868 6681或tastingroom@codmacau.com 官網詳情:httpss.ctm.nethtUY1 御膳扒房mdash;mdash;您的gathering好去處 御膳扒房特別挑選28天熟成美國和牛、頂級黑安格斯谷飼牛和美洲野牛,肉質軟嫩多汁,炭烤風味一絕!餐廳嘅Josper木炭烤箱無需插電或瓦斯,能達300350度的高溫,快速鎖住食材嘅原汁原味,散發出誘人炭火香氣,令人垂涎欲滴! 不論係私人聚會定係家庭聚餐,貴賓廂房可容納14位賓客,等你係典雅嘅環境中盡情享受美食。 最近御膳扒房推出好多CP值超高嘅抵食菜色,等小編帶你睇睇餐廳兩款特推菜單! 德州美式煙燻烤肉mdash;mdash;風味醬汁,味道極佳 「御膳扒房」主廚特調嘅德州風味醬汁,淋喺肉表面,再燻製出獨特香氣,味道絕佳!選用櫻桃木、山胡桃木及蘋果木炭火燒製嘅大理石花紋美國SRF極黑和牛腩、肥嫩牛仔骨,以及多汁豬腩扒,最佳火候激發煙燻飄香,皮脆肉汁四溢,帶來獨特嘅味蕾享受。 櫻桃木煙燻美國和牛牛胸 配洋蔥沙律及牛汁,奢華大理石花紋和牛胸肉在櫻桃木上燻製,風味獨特。 300g $568MOP 山胡桃木煙燻牛小排 肥美嫩滑嘅牛小排,使用山胡桃木片燻製,增強濃郁煙燻味。 300g $498MOP 600g $888MOP 蘋果木煙燻五花肉 多汁嘅五花肉,用蘋果木燻製,配以香甜青蘋果醬,味道和諧平衡。 200g $388MOP 配菜 忌廉甜粟米 $98MOP 碳烤雙孢菇 $128MOP 炭燒牛排番茄 $128MOP 限定推廣期:即日起至 11月30日 CP值超高!六道菜精選晚餐$2888 御膳扒房推出咗適合3至4人分享的6道菜晚膳套餐,套餐包含餐廳大部分嘅招牌菜式,包括1,200克嘅厚切T骨牛扒、極級牛肉他他、香煎帶子、龍蝦或牛肝濃湯、番茄沙律及其他美味甜點。對於有選擇困難症嘅你黎講,絕對係最佳選擇! 對於唔鐘意牛肉的賓客,單點菜單上仲有羊架、燒雞、波士頓龍蝦、海鱸魚等選擇。 呢個套餐真係物超所值!份量非常適合家庭及朋友聚會,同時包含餐廳大部分的招牌菜,快啲約埋你嘅朋友一齊來享受美食啦! 御膳扒房: 地址:澳門新濠天地頤居三樓 查詢或訂座:853 8868 6681或tastingroom@codmacau.com 官網詳情:httpss.ctm.nethtUY1