同一個docker鏡像在不同的服務器運行/tmp目錄權限不一致解決辦法

2021年7月5日14:47:48 發(fā)表評論 4,993 ℃

今天遇到一個比較有意思的問題,在kubernetes集群創(chuàng)建了一個springcloud服務,在其中一臺node上面很快就啟動成功,顯示running了,但是在另外一臺node上面,等了很久都沒啟動成功,查看pod日志,報錯如下:

Unable to create tempDir. java.io.tmpdir is set to /tmp

意思是無法在/tmp目錄下面創(chuàng)建臨時文件。

看見這個報錯,第一反應是鏡像有問題,但是經(jīng)過排查,發(fā)現(xiàn)兩個node使用的同一個鏡像,所以可以排除鏡像的問題。

于是分別進入容器在/tmp目錄創(chuàng)建文件測試。

node1:

同一個docker鏡像在不同的服務器運行/tmp目錄權限不一致解決辦法

node2:

同一個docker鏡像在不同的服務器運行/tmp目錄權限不一致解決辦法

果然node1上面的pod內普通用戶無法在/tmp目錄創(chuàng)建文件。

然后看了下/tmp目錄權限,發(fā)現(xiàn)權限不一致。

node1:

同一個docker鏡像在不同的服務器運行/tmp目錄權限不一致解決辦法

node2:

同一個docker鏡像在不同的服務器運行/tmp目錄權限不一致解決辦法

現(xiàn)在開始懷疑是docker的問題,但查看兩臺node docker版本一致,其他配置也一致,docker根目錄權限也完全一樣。

但是為什么會出現(xiàn)同一個鏡像,在不同服務器上運行以后,出現(xiàn)容器內/tmp目錄不一致的情況呢?

一時間我也毫無頭緒。換著關鍵詞在各個搜索引擎搜索著,看看能否找到類似的問題。

在經(jīng)過十多分鐘的無用功之后,突然想起其中一臺服務器的docker根目錄,上周我做了數(shù)據(jù)遷移,也就是把/var/lib/docker/的數(shù)據(jù),遷移到了其他目錄,而另外一臺是新安裝的docker。

再次去對比了兩臺服務器docker根目錄的權限,發(fā)現(xiàn)沒有區(qū)別。

只能再根據(jù)這個思路,去網(wǎng)上找找答案,最后還是找到了我想要的答案:

在遷移 docker 根目錄的時候注意使用的命令,要么使用 mv 命令直接移動,要么使用 cp 命令復制文件,但是需要注意同時復制文件權限和對應屬性,不然在使用的時候可能會存在權限問題。

如果容器中,也是使用 root 用戶,則不會存在該問題,但是也是需要按照正確的操作來遷移目錄。

此時才想起,我當時遷移用的 cp -R 遞歸復制,并沒有保留權限。

所以正確的應該使用cp -ar 或者 cp -rp保留原來文件的屬性。

然后下線有問題的node,停止docker,刪除現(xiàn)在的docker根目錄,重新cp -ar遷移數(shù)據(jù)。

遷移完以后,啟動docker重新上線node節(jié)點,再創(chuàng)建springcloud服務測試,已經(jīng)可以正常啟動。

【騰訊云】云服務器、云數(shù)據(jù)庫、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: