在本地可以順利構(gòu)建鏡像,在測試服務(wù)器上卻報錯了。截圖如下:

在圖中可以發(fā)現(xiàn),在Dockerfile執(zhí)行到pip安裝下載依賴時就會卡住。
并不是Dockerfile的編譯錯誤,而是什么“Temporary failure in name resolution”錯誤。
1.假設(shè)服務(wù)器網(wǎng)絡(luò)問題
為了不影響服務(wù)器現(xiàn)有環(huán)境,我新建一個虛擬環(huán)境,執(zhí)行pip相關(guān)依賴的下載。

發(fā)現(xiàn)測試服務(wù)器網(wǎng)絡(luò)是通的。沒有問題。
2.由于我使用了pip阿里云鏡像源,假設(shè)無法解析阿里云鏡像源域名。

經(jīng)過測試發(fā)現(xiàn),不僅網(wǎng)絡(luò)是通的,而且延遲相當?shù)汀?/p>
3.容器內(nèi)部網(wǎng)絡(luò)問題
在不斷縮小范圍后,開始排查容器的網(wǎng)絡(luò)問題。
經(jīng)過一番查詢,得到如下結(jié)果:
docker build鏡像時,默認使用網(wǎng)橋(bridge)模式,容器時虛擬環(huán)境,沒有自己的網(wǎng)卡,所以無法連接網(wǎng)絡(luò)。
好在docker在構(gòu)建(build)或者運行(run)鏡像時都提供了選擇網(wǎng)絡(luò)的參數(shù),我們可以使用宿主機的網(wǎng)絡(luò),也就是這臺測試服務(wù)器。
經(jīng)過查詢docker的官方文檔,找了docker build時設(shè)置網(wǎng)絡(luò)的參數(shù)--network

解決問題
在構(gòu)建鏡像時,在命令最后帶上--network host即可。
docker build -t <鏡像名> . --network host

到此為止,解決問題。
參考資料:
docker build以及docker run時使用host網(wǎng)絡(luò)的方法
docker 官方文檔