Go 程序無法使用 /etc/resolv.conf 的 DNS 配置排查記錄

在最近的一次部署中,我遇到一個奇怪的問題:Go 程序在運行時不使用 /etc/resolv.conf 中的 DNS 設置,導致服務無法正常訪問域名。這篇文章記錄下完整的排查過程和最終的解決方案。


1. 問題現象

我有一個部署在 KVM 虛擬機內的 Go 應用,主要功能依賴某些內網域名解析(如 api.service.internal)。而在主機中使用 digcurl 等命令都能正常解析,但 Go 程序卻報錯類似如下:

lookup api.service.internal on 127.0.0.53:53: server misbehaving

查看主機resolv.conf 文件內容如下:

$ cat /etc/resolv.conf
options timeout:1 rotate
search dns.koudai.com host.idcvdian.com
nameserver 10.27.0.84
nameserver 10.27.0.126

這些配置本應該能保證正常解析才對。

2. 初步懷疑:Go DNS 解析邏輯

Go 的 DNS 默認行為與傳統 C 庫不同。Go 在構建時是否啟用 CGO 會直接影響其 DNS 解析邏輯:

構建方式DNS 實現使用 /etc/resolv.conf
CGO_ENABLED=0Go 自帶 DNS 實現只使用 127.0.0.1、Google DNS 等默認配置
CGO_ENABLED=1調用系統 libc遵循 /etc/nsswitch.confresolv.conf

Go 默認靜態構建時不會使用系統的 resolv.conf 進行 DNS 解析,而是使用 Go 內置的 DNS Resolver。

3. 構建方式調整

為了讓 Go 程序在運行時讀取主機的 /etc/resolv.conf 并使用正確的 DNS,我嘗試啟用 CGO:

CGO_ENABLED=1  go build -o myapp main.go

注意,啟用 CGO_ENABLED=1 后會變成動態鏈接,依賴 libc 等系統庫。此時執行 ldd 命令應能看到依賴:

$ ldd ./myapplinux-vdso.so.1 =>  (0x00007ffc6fdff000)libc.so.6 => /lib64/libc.so.6 (0x00007f624af5a000)...

而如果是靜態構建(CGO_ENABLED=0),ldd 則會提示:

$ ldd ./myappnot a dynamic executable

4. 報錯:找不到動態庫

由于我的 KVM 虛擬機是一個極簡化系統,嘗試 CGO_ENABLED=1 構建后,運行程序提示找不到 libc.so.6 等依賴。解決方案:

sudo yum groupinstall "Development Tools"
sudo yum install glibc-devel

安裝過程較大(可能需要幾百 MB),可以只安裝gcc相關

sudo yum install -y gcc glibc-devel

5. 最終構建命令模板

CGO_ENABLED=1 \
GOOS=linux GOARCH=amd64 \
go build -o ./bin/myapp main.go

6. 附加:檢測是否啟用 CGO

go env CGO_ENABLED

輸出 1 表示啟用了 CGO

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

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

相關文章

微服務相關問題(2)

1、Spring Cloud相關常用組件注冊中心(nacos、Eureka等)、負載均衡(Ribbon、LoadBalancer)、遠程調用(feign)、服務熔斷(Sentinel、Hystrix)、網關(Gateway)2…

安全初級2

一、作業要求 1、xss-labs 1~8關 2、python實現自動化sql布爾育注代碼優化(二分查找) 二、xss-labs 1~8關 1、準備 打開小皮面板,啟動MySQL和apacher 下載 xss-labs,并解壓后放到 phpstudy_pro 的 WWW 目錄下,重命名為 xss-labs 訪問鏈…

基礎算法題

基礎算法題 鏈表 1.1反轉鏈表 描述: 描述 給定一個單鏈表的頭結點pHead(該頭節點是有值的,比如在下圖,它的val是1),長度為n,反轉該鏈表后,返回新鏈表的表頭。 數據范圍: 0≤�≤…

Android 15 源碼修改:為第三方應用提供截屏接口

概述 在 Android 系統開發中,有時需要為第三方應用提供系統級的截屏功能。本文將詳細介紹如何通過修改 Android 15 源碼中的 PhoneWindowManager 類,實現一個自定義廣播接口來觸發系統截屏功能。 修改方案 核心思路 通過在系統服務 PhoneWindowManager 中注冊自定義廣播監…

20250717 Ubuntu 掛載遠程 Windows 服務器上的硬盤

由 DeepSeek 生成,方法已經驗證可行。 通過網絡掛載Windows共享硬盤(SMB/CIFS) 確保網絡共享已啟用: 在Windows電腦上,右鍵點擊目標硬盤或文件夾 → 屬性 → 共享 → 啟用共享并設置權限(至少賦予讀取權限&…

深度學習圖像增強方法(二)

三、直方圖均衡化 1. 普通直方圖均衡化 直方圖均衡化的原理是將圖像的灰度直方圖展平,使得每個灰度級都有更多的像素分布,從而增強圖像的對比度。具體步驟如下: 計算灰度直方圖:統計圖像中每個灰度級的像素數量。 計算累積分布函數(CDF):計算每個灰度級的累積概率。 映…

QT——信號與槽/自定義信號與槽

1 信號與槽基本介紹 提出疑問,界面上已經有按鍵了,怎么操作才能讓用戶按下按鍵后有操作上的反應呢? 在 Qt 中,信號和槽機制是一種非常強大的事件通信機制。這是一個重要的概念,特別是對于初學者來說,理解它…

Spring原理揭秘--Spring的AOP

在這之前我們已經介紹了AOP的基本功能和概念,那么當AOP集成到spring則會發生改變。Spring AOP 中的Joinpoint:之前提高了很多Joinpoint的類型,但是在spring中則只會有方法級別的Joinpoint,像構造方法,字段的調用都沒適…

C++學習筆記五

C繼承//基類 class Animal{};//派生類 class Dog : public Animal{};#include<iostearm> using namespace std;//基類 class Shape{public:void setwidth(int w){width w;}void setheight(int h){height h;}protected:int width;int height;}//派生類 class Rectangle …

AndroidStudio環境搭建

一、AndroidStudio下載 正常百度出來的站會自動翻譯成中文&#xff0c;導致歷史版本的界面總是顯示不出可下載的地方&#xff0c;點擊成切回英文&#xff0c;就能看出了。 歷史版本&#xff1a;https://developer.android.google.cn/studio/archive

Java大廠面試實錄:從Spring Boot到AI大模型的深度技術拷問

場景&#xff1a;互聯網大廠Java后端面試 面試官&#xff08;嚴肅&#xff09;&#xff1a;小曾&#xff0c;請坐。今天主要考察Java后端技術棧&#xff0c;包括微服務、大數據、AI等。我們先從簡單問題開始。 小曾&#xff08;搓手&#xff09;&#xff1a;好嘞&#xff01;面…

深入解析Hadoop中的HDFS架構設計

HDFS概述與核心設計原則作為Hadoop生態系統的基石&#xff0c;HDFS&#xff08;Hadoop Distributed File System&#xff09;是一種專為大規模數據處理而設計的分布式文件系統。它的核心設計理念源于對互聯網時代數據特征的深刻洞察——數據規模呈指數級增長&#xff0c;而硬件…

ota之.加密算法,mcu加密方式

一、ota之.加密算法&#xff0c;mcu加密方式 前面一篇文章&#xff0c;講了soc的加密方式&#xff0c;但是soc資源充足&#xff0c;mcu沒有&#xff0c;所以不會用openss生成公私鑰 切計算哈希用rsa256位。 ECC&#xff08;橢圓曲線加密&#xff09; 是一種非對稱加密算法&…

LangChain面試內容整理-知識點23:實戰案例:檢索增強生成(RAG)系統

檢索增強生成(Retrieval-Augmented Generation, RAG)是一種將LLM與外部知識庫結合的方法,通過實時檢索相關信息來輔助生成答案。這極大緩解了LLM“封閉知識”過期或不足的問題。LangChain非常適合構建RAG系統,因為它提供了文檔加載、向量存儲、檢索接口、LLM組合的一站式方…

探索阿里云ESA:開啟邊緣安全加速新時代

阿里云 ESA 是什么&#xff1f;阿里云 ESA&#xff0c;全稱邊緣安全加速&#xff08;Edge Security Acceleration&#xff09; &#xff0c;其前身為全站加速 DCDN&#xff08;Dynamic Content Delivery Network&#xff09;。在 2024 年 9 月 30 日&#xff0c;阿里云完成了這…

醋酸鈰:賦能科技創新的稀土之力

一、什么是醋酸鈰醋酸鈰是鈰元素與醋酸根離子形成的化合物。鈰作為稀土元素中的重要一員&#xff0c;廣泛應用于材料科學、催化劑、電子產品等領域。醋酸鈰以無色結晶或淺黃色結晶的形式存在&#xff0c;是鈰的有機鹽之一。它不僅具有穩定的化學性質&#xff0c;而且在某些特定…

數據結構之普利姆算法

前言&#xff1a;Prim算法是圖論中的算法&#xff0c;用來生成圖的最小生成樹。本篇文章介紹算法的流程&#xff0c;實現思想&#xff0c;和具體代碼實現&#xff0c;使用c語言。學習需要輸出才能理解的更透徹&#xff0c;所以說堅持寫文章&#xff0c;希望可以用自己的方式把一…

構建強大的物聯網架構所需了解的一切

數據正驅動著當今的商業發展&#xff0c;而物聯網&#xff08;IoT&#xff09;則有助于為企業的增長和創新開辟新的機遇。麥肯錫的研究表明&#xff0c;全球數據在四年內實現了驚人的 7 倍增長。隨著越來越多的物聯網設備進入市場&#xff0c;更多企業開始需要強大的物聯網架構…

java之json轉excel生成

背景 業務為實現自定義樣式excel的導出&#xff0c;常規的做法就是根據數據在代碼中進行類似模版的配置&#xff1b;這樣的體驗不是很好&#xff0c;只要用戶改變下樣式的設置不用代碼改動就能實現自定義excel的導出更加靈活。 以下是具體實現 pom依賴 <dependency><g…

新版本Cursor中配置自定義MCP服務器教程,附MCP工具開發實戰源碼

在 Cursor 中配置自定義 MCP 服務器&#xff1a;打造你的 AI 開發工具鏈 引言 隨著 AI 編程助手的普及&#xff0c;開發者們越來越希望能夠定制化自己的開發環境。Cursor 作為一款強大的 AI 編程編輯器&#xff0c;提供了 Model Context Protocol (MCP) 支持&#xff0c;新版本…