欢迎来到站长天空!

其它服务器

当前位置: 主页 > 服务器 > 其它服务器

docker(alpine+golang) 中 hosts 不生效问题解决方法

时间:2025-12-22 23:30:05|栏目:其它服务器|点击:

目录
  • 一、问题
  • 二、解决
    • 方法一、增加配置
    • 方法二、映射配置
    • 方法三、修改镜像
  • 知识点延伸

    一、问题

    把使用 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日,截图如下:

    docker(alpine+golang) 中 hosts 不生效问题解决方法

    上一篇:docker搭建redis主从哨兵集群的实现步骤

    栏    目:其它服务器

    下一篇:nginx 代理后出现503的解决方法

    本文标题:docker(alpine+golang) 中 hosts 不生效问题解决方法

    本文地址:https://zz.feitang.co/server/32782.html

    广告投放 | 联系我们 | 版权申明

    申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

    如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

    联系QQ:257218569 | 邮箱:257218569@qq.com

    Copyright © 2018-2025 站长天空 版权所有 Powered by EyouCms冀ICP备14023439号