docker(alpine+golang) 中 hosts 不生效问题解决方法
目录
- 一、问题
- 二、解决
- 方法一、增加配置
- 方法二、映射配置
- 方法三、修改镜像
- 知识点延伸
一、问题
把使用 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日,截图如下:

您可能感兴趣的文章
- 02-02hadoop动态增加和删除节点方法介绍
- 02-02干货 | Linux新手入门好书推荐
- 02-02linux系统下MongoDB单节点安装教程
- 02-02Linux下nginx生成日志自动切割的实现方法
- 02-02Centos 6中编译配置httpd2.4的多种方法详解
- 02-02CentOS7 下安装telnet服务的实现方法
- 02-02分布式Hibernate search详解
- 02-02Hadoop对文本文件的快速全局排序实现方法及分析
- 02-02CentOS6.3添加nginx系统服务的实例详解
- 02-02Hadoop编程基于MR程序实现倒排索引示例


阅读排行
推荐教程
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07解决tomcat启动报错:一个或多个listeners启动失败问题
- 12-07Tomcat启动报错:严重: Unable to process Jar entry [m
- 12-07Tomcat配置IPV6的实现步骤
- 12-07tomcat启动报错jar not loaded的问题
- 12-11docker存储目录迁移示例教程
- 01-07windows server 2008安装配置DNS服务器
- 12-07Tomcat部署war包并成功访问网页详细图文教程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程




