AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

與機器打交道的工作:細節決定浪費生命的時間——記一次 Docker 與軟鏈接的故障

來源: 責編: 時間:2024-07-19 08:01:38 613觀看
導讀問題背景假設在一臺 ubuntu 服務器上,我們有一個專門存放日頻數據的路徑:ls /data/daily -lh202401012024010220240103...這些數據過于龐大,我們無法將其全部保存在服務器中。對于這些數據,只有當天的路徑,我們需要對其有

問題背景

假設在一臺 ubuntu 服務器上,我們有一個專門存放日頻數據的路徑:Tbr28資訊網——每日最新資訊28at.com

ls /data/daily -lh202401012024010220240103...

這些數據過于龐大,我們無法將其全部保存在服務器中。對于這些數據,只有當天的路徑,我們需要對其有「寫」的權限,歷史數據我們只讀即可。Tbr28資訊網——每日最新資訊28at.com

因此,假設今天是 20240717 ,那么,我們可以將小于 20240717 的數據軟鏈接到一個 mount 到服務器上的分布式文件系統中,比如:Tbr28資訊網——每日最新資訊28at.com

ls /data/daily -lh20240101 -> /mnt/gfs-data/daily/2024010120240102 -> /mnt/gfs-data/daily/20240102...20240716 -> /mnt/gfs-data/daily/2024071620240717

接下來,我們希望啟動的 docker 容器可以訪問 daily 數據,那么:Tbr28資訊網——每日最新資訊28at.com

docker run /  -v /data/daily:/data/daily /  --name my-service-container /  my-service-image  run-service-command

此時 my-service-container 報錯:Tbr28資訊網——每日最新資訊28at.com

no such file or directory: /data/daily/20240716

但是當你進入容器:Tbr28資訊網——每日最新資訊28at.com

docker exec -it my-service-container /bin/bash$ cd /data/daily$ ls20240101  20240102  ...  20240716 20240717# 數據似乎存在?$ ls -l 20240716no such file or directory: 20240716# 明明存在,卻無法訪問?

那么,問題出在了哪里?

我估計讀到這里的讀者中,至少有一半已經知道了問題所在。Tbr28資訊網——每日最新資訊28at.com

但是讓我們先來看看一些錯誤的思路(也是困住了我的思路):Tbr28資訊網——每日最新資訊28at.com

一、會不是文件系統權限問題?Tbr28資訊網——每日最新資訊28at.com

  • 顯然, docker 容器在未開啟 --privileged ,權限是不完整的
  • 尤其是涉及到與 mount 分布式文件系統的交互,這其中是很容易出問題的

二、軟鏈接的問題?Tbr28資訊網——每日最新資訊28at.com

  • 軟鏈接本身不復雜,但是 docker 與軟鏈接的結合,可能有點問題?
  • 于是甚至很傻地去搜了 stackoverflow ,嘗試類比 docker 、 softlink 、 mount 相關的問題

三、其他更復雜的原因導致的?Tbr28資訊網——每日最新資訊28at.com

  • 問問 ChatGPT 吧!免費版不聰明,再問問 ChatGPT-4o !
  • 嗯...是我的 prompt 寫得太差了?獲得了一些正確的廢話

如果你已經知道問題,你或許會嘲笑上述費力不討好的一番折騰。但是為什么我(或者其他陷入誤區的讀者)會想到這些呢?Tbr28資訊網——每日最新資訊28at.com

  1. 思維慣性。大多數日常使用 docker 的人(比如現在的我),對于 docker 的了解是不夠深入的,在經歷過一些 docker 的 bug 后,再遇到類似的問題,首先會順其自然想到是不是 docker 本身的問題
  2. 所見即所得。我明明已經 ls 出了 20240101 20240102 ... 20240716 20240717 ,為什么還會出現 no such file or directory: /data/daily/20240716 ?顯然, 20240716 是軟鏈接的、是來自 /mnt/gfs-data/ 的,而這個龐大的分布式文件系統很有可能存在一些兼容性問題

真正的解決之道

我在 docker 內部敲入下面的命令讓我恍然大悟,甚至為自己的愚蠢發笑:Tbr28資訊網——每日最新資訊28at.com

docker exec -it my-service-container /bin/bash$ cd /data/daily$ ls -lh20240101 -> /mnt/gfs-data/daily/2024010120240102 -> /mnt/gfs-data/daily/20240102...20240716 -> /mnt/gfs-data/daily/2024071620240717

顯然,軟鏈接在 docker 內部鏈接到了 /mnt/gfs-data/ ,那么,你也需要讓 /mnt/gfs-data/ 映射到本地的 /data/daily/ 路徑上!Tbr28資訊網——每日最新資訊28at.com

增加一行掛載直接解決問題:Tbr28資訊網——每日最新資訊28at.com

docker run /  -v /data/daily:/data/daily /  -v /mnt/gfs-data:/mnt/gfs-data /  --name my-service-container /  my-service-image  run-service-command

所以,既不是 docker 的問題,也不是權限的問題,更不是文件系統的問題。Tbr28資訊網——每日最新資訊28at.com

為什么程序員的下班時間不同

所以,為什么有些程序員下班早,看起來還很輕松?Tbr28資訊網——每日最新資訊28at.com

他可能并不是摸魚大事。相反,他對于機器有更好的直覺與靈感,而這一切的前提是他積累了足夠的知識與經驗。Tbr28資訊網——每日最新資訊28at.com

顯然,對于 docker ,僅僅知道基本的 cgroups 實現原理是不夠的。沒有更扎實的基礎知識與經驗作為支撐,我們甚至總是焦頭爛額地走向了錯誤的解決問題的方向。Tbr28資訊網——每日最新資訊28at.com

細節決定浪費生命的時間。停下來,想一想自己是不是剛剛死腦筋了。Tbr28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-101715-0.html與機器打交道的工作:細節決定浪費生命的時間——記一次 Docker 與軟鏈接的故障

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 我們如何管理軟件項目的交付?

下一篇: Java 函數式接口,一文徹底剖析!

標簽:
  • 熱門焦點
Top