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
方法二、映射配置
但是方法一會(huì)存在一個(gè)問題,就是容器重啟后,配置文件就消失了。因此可以使用如下方式來規(guī)避這個(gè)問題,映射這個(gè)配置文件進(jìn)去。
首先創(chuàng)建一個(gè)配置文件 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方法三、修改鏡像
終極方法,從根本上解決這個(gè)問題,那就是從基礎(chǔ)鏡像上下功夫,打包服務(wù)鏡像的時(shí)候,把配置文件加進(jìn)入,Dockerfile 文件修改如下:
FROM alpine RUN echo "hosts: files dns" > /etc/nsswitch.conf
知識(shí)點(diǎn)延伸
alpine 是一個(gè)小而美的基礎(chǔ)鏡像包,最新的 latest 包大小是 5.53MB,時(shí)間是 2022年7月3日,截圖如下:

到此這篇關(guān)于docker(alpine+golang) 中 hosts 不生效問題解決大全的文章就介紹到這了,更多相關(guān)docker hosts 不生效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea?連接遠(yuǎn)程?docker?并部署項(xiàng)目到?docker的過程
這篇文章主要介紹了idea連接遠(yuǎn)程docker并部署項(xiàng)目到docker,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-10-10
如何設(shè)置docker開機(jī)自啟動(dòng),并設(shè)置容器自動(dòng)重啟
這篇文章主要介紹了如何設(shè)置docker開機(jī)自啟動(dòng),并設(shè)置容器自動(dòng)重啟問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
微信小程序Docker+Nginx環(huán)境配置業(yè)務(wù)域名驗(yàn)證文件的操作方法
本文介紹了如何在DockerCompose+Nginx環(huán)境下配置并訪問靜態(tài)驗(yàn)證文件,首先下載驗(yàn)證文件并將其掛載到容器中,然后修改Nginx配置文件使其能夠正確返回請求路徑下的靜態(tài)文件,最后,測試訪問驗(yàn)證文件并提交業(yè)務(wù)域名,感興趣的朋友跟隨小編一起看看吧2025-01-01
docke-cli的調(diào)試環(huán)境搭建過程
在搭建docker-cli的調(diào)試環(huán)境時(shí),遇到很多坑,通過本文講解下搭建docke-cli的調(diào)試環(huán)境的詳細(xì)方法,需要的朋友可以參考下2022-11-11
Docker安裝MySQL8.0的詳細(xì)步驟(附圖文!)
Windows上安裝MySQL相對來說會(huì)較為簡單,但是在Docker安裝就沒那么簡單了,下面這篇文章主要給大家介紹了關(guān)于Docker安裝MySQL8.0的詳細(xì)步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
pod污點(diǎn)taint?與容忍度tolerations詳解
這篇文章主要為大家介紹了pod污點(diǎn)taint與容忍度tolerations示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Docker安裝配置Redis鏡像的實(shí)現(xiàn)步驟
Redis是一個(gè)由Salvatore Sanfilippo寫的key-value存儲(chǔ)系統(tǒng),是跨平臺(tái)的非關(guān)系型數(shù)據(jù)庫。Redis 是一個(gè)開源的使用 ANSI C 語言編寫、遵守 BSD 協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存、分布式、可選持久性的鍵值對(Key-Value)存儲(chǔ)數(shù)據(jù)庫,并提供多語言API,本文帶你在Docker安裝配置它2021-11-11
Docker 實(shí)現(xiàn)容器端口綁定本地端口
這篇文章主要介紹了Docker 實(shí)現(xiàn)容器端口綁定本地端口的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
docker 報(bào)錯(cuò) Exited (1) 4 minutes ago的原因分析
這篇文章主要介紹了docker 報(bào)錯(cuò) Exited (1) 4 minutes ago的原因分析,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11

