docker(alpine+golang)?中?hosts?不生效問題解決方法
一、問題
把使用 golang 開發(fā)的服務(wù)程序部署在以 alpine 為基礎(chǔ)鏡像的容器中,設(shè)置了 /etc/hosts,卻沒有生效,但是在終端中使用 ping 和 curl 域名都可以正常訪問。
二、解決
出現(xiàn)上述問題的根本原因是 DNS 解析順序不一致導(dǎo)致的,在 alpine 中,linux 系統(tǒng)默認(rèn)跳過 hosts 配置,直接使用機(jī)器的 DNS 服務(wù)。因此,有如下三種解決方法。
方法一、增加配置
修改 NDS 解析順序,先設(shè)置讀 files,再設(shè)置讀 dns,具體方法如下:
echo "hosts: files dns" > /etc/nsswitch.conf
方法二、映射配置
但是方法一會存在一個問題,就是容器重啟后,配置文件就消失了。因此可以使用如下方式來規(guī)避這個問題,映射這個配置文件進(jìn)去。
首先創(chuàng)建一個配置文件 nsswitch.conf ,內(nèi)容如下:
hosts: files dns
然后,在 docker-compose.yml 中或者 docker run 中映射一下配置文件,參考方法如下:
version: '3'
services:
test:
image: tets-x86:latest
container_name: test-x86
restart: always
network_mode: "host"
volumes:
- ./config/nsswitch.conf:/etc/nsswitch.conf方法三、修改鏡像
終極方法,從根本上解決這個問題,那就是從基礎(chǔ)鏡像上下功夫,打包服務(wù)鏡像的時候,把配置文件加進(jìn)入,Dockerfile 文件修改如下:
FROM alpine RUN echo "hosts: files dns" > /etc/nsswitch.conf
知識點(diǎn)延伸
alpine 是一個小而美的基礎(chǔ)鏡像包,最新的 latest 包大小是 5.53MB,時間是 2022年7月3日,截圖如下:

到此這篇關(guān)于docker(alpine+golang)中hosts不生效問題解決大全的文章就介紹到這了,更多相關(guān)dockerhosts不生效內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信