網站首頁 編程語言 正文
一、問題
把使用 golang 開發的服務程序部署在以 alpine 為基礎鏡像的容器中,設置了 /etc/hosts,卻沒有生效,但是在終端中使用 ping 和 curl 域名都可以正常訪問。
二、解決
出現上述問題的根本原因是 DNS 解析順序不一致導致的,在 alpine 中,linux 系統默認跳過 hosts 配置,直接使用機器的 DNS 服務。因此,有如下三種解決方法。
方法一、增加配置
修改 NDS 解析順序,先設置讀 files,再設置讀 dns,具體方法如下:
echo "hosts: files dns" > /etc/nsswitch.conf
方法二、映射配置
但是方法一會存在一個問題,就是容器重啟后,配置文件就消失了。因此可以使用如下方式來規避這個問題,映射這個配置文件進去。
首先創建一個配置文件 nsswitch.conf ,內容如下:
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
方法三、修改鏡像
終極方法,從根本上解決這個問題,那就是從基礎鏡像上下功夫,打包服務鏡像的時候,把配置文件加進入,Dockerfile 文件修改如下:
FROM alpine RUN echo "hosts: files dns" > /etc/nsswitch.conf
知識點延伸
alpine 是一個小而美的基礎鏡像包,最新的 latest 包大小是 5.53MB,時間是 2022年7月3日,截圖如下:
原文鏈接:https://blog.csdn.net/liuzehn/article/details/125669371
相關推薦
- 2022-12-10 K8S節點本地存儲被撐爆問題徹底解決方法_云其它
- 2022-09-29 Python執行時間計算方法以及優化總結_python
- 2022-10-15 詳解C++中常用的四種類型轉換方式_C 語言
- 2022-04-26 python?logging多進程多線程輸出到同一個日志文件的實戰案例_python
- 2023-01-30 delphi?判斷字符串是否為純字母組合的函數_Delphi
- 2022-07-21 SpringBoot默認開啟AOP,采用Cglib代理方式?(Spring AOP快速入門)
- 2023-05-23 深入了解React中的合成事件_React
- 2022-10-17 一文教會你用nginx+uwsgi部署自己的django項目_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支