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 不生效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • idea 连接远程 docker 并部署项目到 docker的过程

    idea 连接远程 docker 并部署项目到 docker的过程

    这篇文章主要介绍了idea连接远程docker并部署项目到docker,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • 如何设置docker开机自启动,并设置容器自动重启

    如何设置docker开机自启动,并设置容器自动重启

    这篇文章主要介绍了如何设置docker开机自启动,并设置容器自动重启问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 微信小程序Docker+Nginx环境配置业务域名验证文件的操作方法

    微信小程序Docker+Nginx环境配置业务域名验证文件的操作方法

    本文介绍了如何在DockerCompose+Nginx环境下配置并访问静态验证文件,首先下载验证文件并将其挂载到容器中,然后修改Nginx配置文件使其能够正确返回请求路径下的静态文件,最后,测试访问验证文件并提交业务域名,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • Docker容器简单部署nginx过程解析

    Docker容器简单部署nginx过程解析

    这篇文章主要介绍了Docker容器简单部署nginx过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • docke-cli的调试环境搭建过程

    docke-cli的调试环境搭建过程

    在搭建docker-cli的调试环境时,遇到很多坑,通过本文讲解下搭建docke-cli的调试环境的详细方法,需要的朋友可以参考下
    2022-11-11
  • Docker安装MySQL8.0的详细步骤(附图文!)

    Docker安装MySQL8.0的详细步骤(附图文!)

    Windows上安装MySQL相对来说会较为简单,但是在Docker安装就没那么简单了,下面这篇文章主要给大家介绍了关于Docker安装MySQL8.0的详细步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • pod污点taint 与容忍度tolerations详解

    pod污点taint 与容忍度tolerations详解

    这篇文章主要为大家介绍了pod污点taint与容忍度tolerations示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Docker安装配置Redis镜像的实现步骤

    Docker安装配置Redis镜像的实现步骤

    Redis是一个由Salvatore Sanfilippo写的key-value存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多语言API,本文带你在Docker安装配置它
    2021-11-11
  • Docker 实现容器端口绑定本地端口

    Docker 实现容器端口绑定本地端口

    这篇文章主要介绍了Docker 实现容器端口绑定本地端口的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • docker 报错 Exited (1) 4 minutes ago的原因分析

    docker 报错 Exited (1) 4 minutes ago的原因分析

    这篇文章主要介绍了docker 报错 Exited (1) 4 minutes ago的原因分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11

最新评论