解決 Go 構建依賴超時問題:使用 GOPROXY 提升 Docker 構建穩定性

目錄

解決 Go 構建依賴超時問題:使用 GOPROXY 提升 Docker 構建穩定性

? 問題背景

? 正確做法:多階段中在 Go 階段設置 GOPROXY

? 實際收獲

🧪 小技巧:驗證 GOPROXY 設置是否生效

? 總結


解決 Go 構建依賴超時問題:使用 GOPROXY 提升 Docker 構建穩定性

在構建包含 Go 模塊的項目時,很多國內開發者常常遇到如下錯誤:

Get "https://proxy.golang.org/...": dial tcp ...: i/o timeout

這是由于 Go 默認使用國外的模塊代理 https://proxy.golang.org,在國內訪問常常被墻或極慢,導致 go mod tidygo build 失敗。解決方法是使用國內代理源,如七牛的 https://goproxy.cn


? 問題背景

項目使用了 Go 寫的 HTML 轉 Markdown 插件,作為 .so 庫供主服務調用。Docker 構建流程如下:

FROM golang:1.24 AS go-base
ENV GOPROXY=https://goproxy.cn,direct
COPY sharedLibs/go-html-to-md /app/sharedLibs/go-html-to-mdRUN cd /app/sharedLibs/go-html-to-md && \go mod tidy && \go build -o html-to-markdown.so -buildmode=c-shared html-to-markdown.go && \chmod +x html-to-markdown.so

初始我們曾在前置 Node 階段中設置:

ENV GOPROXY=https://goproxy.cn,direct

但因 FROM node:22-slim 并未安裝 Go,此變量并未影響實際 go mod tidy 執行,導致依賴拉取仍失敗。


? 正確做法:多階段中在 Go 階段設置 GOPROXY

只需將 ENV GOPROXY=... 放在 golang:1.24 階段中:

FROM golang:1.24 AS go-base
ENV GOPROXY=https://goproxy.cn,direct
...

并確保在 go mod tidy 執行前生效。構建將穩定、快速完成。


? 實際收獲

  • 構建時間從數分鐘下降至數十秒

  • 完美解決 i/o timeout 報錯

  • 構建日志更干凈,無需反復重試依賴


🧪 小技巧:驗證 GOPROXY 設置是否生效

你可以加入調試語句查看:

RUN echo "Using GOPROXY=$GOPROXY"

構建日志輸出如下即表示成功:

Using GOPROXY=https://goproxy.cn,direct

? 總結

構建時遇到 Go 網絡超時問題,不是設置 GOPROXY 無效,而是設置的位置錯了。確保在實際使用 Go 命令的階段配置 GOPROXY,配合國內源如 https://goproxy.cn,可極大提升構建效率和穩定性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81381.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81381.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81381.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【周輸入】510周閱讀推薦-3

前文 【周輸入】510周閱讀推薦-1-CSDN博客 【周輸入】510周閱讀推薦-2-CSDN博客 本次推薦 目錄 前文 本次推薦 算法技術 模型產品 算法技術 vLLM和DeepSpeed部署模型的優缺點_vllm deepspeed-CSDN博客 優點缺點總結vLLM 適用于推理 優化內存管理 高效并行化 功能單…

Kubernetes控制平面組件:Kubelet詳解(七):容器網絡接口 CNI

云原生學習路線導航頁(持續更新中) kubernetes學習系列快捷鏈接 Kubernetes架構原則和對象設計(一)Kubernetes架構原則和對象設計(二)Kubernetes架構原則和對象設計(三)Kubernetes控…

【推薦】新準則下對照會計報表172個會計科目解釋

序號 科目名稱 對應的會計報表項目 序號 科目名稱 對應的會計報表項目   一、資產類     二、負債類   1 1001 庫存現金 貨幣資金 103 2001 短期借款 短期借款 2 1002 銀行存款 貨幣資金 104 2101 交易性金融負債 易性金融負債 3 1012 其他貨幣資…

MongoDB的安裝及簡單使用

MongoDB 是一個開源的文檔型 NoSQL 數據庫??,由 MongoDB Inc. 開發,專為靈活性和可擴展性設計。 特點: ??1.文檔模型??:數據以 BSON(二進制 JSON)格式存儲,支持嵌套結構。 ??2.動態 S…

Gartner《如何將生成式人工智能(GenAI)集成到應用架構》學習心得

針對軟件架構師、技術專業人士如何更好的把 GenAI 如何融入解決方案,提升用戶體驗、生產力并帶來差異化成果的趨勢,Gartner發布了《Integrating GenAI Into Your Application Architecture》研究報告。 報告首先介紹了 GenAI 的發展背景,指出其已成為主流趨勢,大型語言模型…

IDEA - Windows IDEA 代碼塊展開與折疊(基礎折疊操作、高級折疊操作)

一、基礎折疊操作 折疊當前代碼塊:Ctrl - # 操作方式按下 【Ctrl】 鍵,再按下 【-】 鍵展開當前代碼塊:Ctrl # 操作方式按下 【Ctrl】 鍵,再按下 【】 鍵折疊所有代碼塊:Ctrl Shift - # 操作方式按下 【Ctrl】…

基于STM32F103與Marvell88W8686的WIFI無線監控視頻傳輸系統研發(論文)

基于STM32F103與Marvell88W8686的WIFI無線監控視頻傳輸系統研發 中文摘要 在當今社會信息化進程不斷加速的時代背景下,眾多領域對于監控系統的需求日益增長,像車內安全監控、電梯運行監控等場景都離不開監控系統的支持。過去,不少領域普遍采用…

Java基礎知識總結(超詳細整理)

一:概述 1.1Java類及類的成員 屬性、方法、構造器、代碼塊、內部類 (1)數組 java虛擬機內存劃分 各區域作用 內存解析 基本使用 兩個變量指向一個一維數組 沒有new就不會在堆里新開辟空間 (2)對象數組 (3&a…

StarRocks Community Monthly Newsletter (Apr)

版本動態 3.4.3 版本更新 核心功能升級 Routine Load和Stream Load新增Lambda表達式支持,支持復雜的列數據提取 增強JSON數據處理能力,支持將JSON Array/Object轉為ARRAY/MAP類型 優化information_schema.task_runs視圖查詢,新增LIMIT支持…

探索AI新領域:生成式人工智能認證(GAI認證)助力職場發展

在數字化時代的大潮中,人工智能(AI)技術以其強大的影響力和廣泛的應用前景,正逐步重塑我們的生活與工作方式。隨著生成式AI技術的崛起,掌握這一前沿技能已成為職場競爭中的關鍵優勢。那么,如何通過系統的學…

數據庫觸發器Trigger

在數據庫管理系統中,觸發器(Trigger)是一種特殊的存儲過程,它在特定的事件發生時自動執行。觸發器通常用于維護數據的完整性和一致性。通過事件觸發而被執行,不能直接調用。 觸發器的三要素 觸發事件 before/after&a…

如何利用 Java 爬蟲獲得某書筆記詳情:實戰指南

在知識分享和學習的領域,許多平臺提供了豐富的書籍筆記和學習資源。通過 Java 爬蟲技術,我們可以高效地獲取這些筆記的詳細信息,以便進行進一步的分析和整理。本文將詳細介紹如何利用 Java 爬蟲獲取某書筆記詳情,并提供完整的代碼…

主成分分析的應用之sklearn.decomposition模塊的PCA函數

主成分分析的應用之sklearn.decomposition模塊的PCA函數 一、模型建立整體步驟 二、數據 2297.86 589.62 474.74 164.19 290.91 626.21 295.20 199.03 2262.19 571.69 461.25 185.90 337.83 604.78 354.66 198.96 2303.29 589.99 516.21 236.55 403.92 730.05 438.41 225.80 …

【Redis】List 列表

文章目錄 初識列表常用命令lpushlpushxlrangerpushrpushxlpop & rpoplindexlinsertllen阻塞操作 —— blpop & brpop 內部編碼應用場景 初識列表 列表類型,用于存儲多個字符串。在操作和實現上,類似 C 的雙端隊列,支持隨機訪問(O(N)…

Android framework 中間件開發(三)

前兩篇我們講了中間件的開發和打包應用, Android framework 中間件開發(一) Android framework 中間件開發(二) 這邊我們來講一下在中間件中編寫JNI 1.新建C文件 找到frameworks\base\services\core\jni\路徑,新建一個cpp文件,文件名為com_android_server_DarkControlService.c…

深入了解linux系統—— 基礎IO(上)

文件 在之前學習C語言文件操作時,我們了解過什么是文件,這里簡單回顧一下: 文件存在磁盤中,文件有分為程序文件、數據文件;二進制文件和文本文件等。 詳細描述見文章:文件操作——C語言 文件在磁盤里&a…

Flink CDC—實時數據集成框架

Flink CDC 是一個基于流的數據集成工具,旨在為用戶提供一套功能更加全面的編程接口(API),它基于數據庫日志的 CDC(變更數據捕獲)技術實現了統一的增量和全量數據讀取。 該工具使得用戶能夠以 YAML 配置文件…

ES(ES2023/ES14)最新更新內容,及如何減少內耗

截至2023年10月,JavaScript(ECMAScript)的最新版本是 ES2023(ES14)。 ES2023 引入了許多新特性,如findLast、toSorted等,同時優化了性能。通過減少全局變量、避免內存泄漏、優化循環、減少DOM操作、使用Web Workers、懶加載、緩存、高效數據結構和代碼壓縮,可以顯著降低…

常見的 Python 環境配置問題及解決方案

1. Python 環境配置的常見問題 初學者在配置 Python 環境時,可能會遇到以下幾類問題: 1.1 不同版本的兼容性 Python 目前有兩個主要版本系列:Python 2.x 和 Python 3.x。Python 2.x 已于 2020 年 1 月 1 日停止維護,因此強烈建…

day20-線性表(鏈表II)

一、調試器 1.1 gdb(調試器) 在程序指定位置停頓 1.1.1 一般調試 gcc直接編譯生成的是發布版(Release) gcc -g //-g調式版本,(體積大,內部有源碼)(DeBug&#…