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

 更新时间:2022年07月08日 09:58:02   作者:Data-Mining  
这篇文章主要介绍了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日,截图如下:

到此这篇关于docker(alpine+golang) 中 hosts 不生效问题解决大全的文章就介绍到这了,更多相关docker hosts 不生效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker 解决获取容器获取的时间不是本地时间的问题

    Docker 解决获取容器获取的时间不是本地时间的问题

    这篇文章主要介绍了Docker 解决获取容器获取的时间不是本地时间的问题的相关资料,需要的朋友可以参考下
    2016-11-11
  • Docker Login 登录凭证安全存储方式

    Docker Login 登录凭证安全存储方式

    本文主要探讨Docker镜像仓库登录凭证的存储问题,Docker利用docker login命令校验用户镜像仓库的登录凭证,正确的用户名密码会以base64编码格式保存在Docker配置文件中,这种方式极易泄露且不安全
    2024-09-09
  • 在CentOS启动时自动加载内核模块overlayfs操作

    在CentOS启动时自动加载内核模块overlayfs操作

    这篇文章主要介绍了在CentOS启动时自动加载内核模块overlayfs操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker<容器数据卷-v>对容器内数据持久化详解(备份)

    docker<容器数据卷-v>对容器内数据持久化详解(备份)

    容器的数据持久化主要是指宿主机与容器,以及容器与容器之间进行数据交互,下面这篇文章主要给大家介绍了关于docker<容器数据卷-v>对容器内数据持久化的相关资料,需要的朋友可以参考下
    2023-03-03
  • 详解docker-compose安装minio

    详解docker-compose安装minio

    这篇文章主要介绍了docker-compose安装minio的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • docker容器在uos-12038.101上启动报错的解决办法

    docker容器在uos-12038.101上启动报错的解决办法

    这篇文章主要介绍了docker容器在uos-12038.101上启动报错的问题,解决方案是需要在/etc/systemd/system/或者 /usr/lib/systemd/system/
    找到docker.service文件,在ExecStart=/usr/bin/dockerd后面添加 --default-ulimit nofile=65536:65536参数,需要的朋友可以参考下
    2024-03-03
  • docker compose运行微服务项目的方法

    docker compose运行微服务项目的方法

    这篇文章主要介绍了docker compose运行微服务项目 ,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • 云原生Docker容器自定义DNS解析

    云原生Docker容器自定义DNS解析

    Docker没有为每个容器专门定制镜像,那么怎么自定义配置容器的DNS配置呢?这篇文章主要给大家介绍了关于云原生Docker容器自定义DNS的相关资料,需要的朋友可以参考下
    2023-02-02
  • docker-compose安装db2数据库操作

    docker-compose安装db2数据库操作

    这篇文章主要介绍了docker-compose安装db2数据库操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • docker文件存放路径, 获取容器启动命令操作

    docker文件存放路径, 获取容器启动命令操作

    这篇文章主要介绍了docker文件存放路径, 获取容器启动命令操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11

最新评论