在docker环境中实现配置hosts

 更新时间:2025年04月07日 09:57:00   作者:linyb极客之路  
这篇文章主要介绍了在docker环境中实现配置hosts,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

不知道大家有没有遇到这种场景,部署在docker环境的项目,需要通过域名访问外部一些资源,但因为没有配置dns解析,因此需要通过配置hosts来进行访问。

本文就来聊聊可以通过哪些方式可以在docker容器中配置hosts

配置的方法

方法一

启动容器的时候加上“–add-host”

示例:

docker run --add-host='www.lyb-geek.com:127.0.0.1' --add-host='www.lyb-geek.cn:192.168.3.1' --name hello-docker -it 192.168.0.1:5002/lybgeek/hello-docker:1.0

方法二

如果是通过docker-compose启动容器,可以配置extra_hosts属性

示例

version: '3.7'
services:
  hello-docker:
    restart: always
    image: 192.168.0.1:5002/lybgeek/hello-docker:1.0
    extra_hosts:
    - "www.lyb-geek.com:127.0.0.1"
    - "www.lyb-geek.cn:192.168.3.1"
    container_name: hello-docker
    network_mode: bridge
    ports:
     - "80:80"
    environment:
     - ENV=dev

方法三

如果是通过k8s来管理容器,则在可以在创建pod的yaml文件通过hostAliases添加域名IP映射

示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: dev
  name: hello-docker-deployment
  labels:
    app: hello-docker
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-docker
  template:
    metadata:
      labels:
        app: hello-docker
    spec:
      hostAliases:
      - hostnames:
        - www.lyb-geek.com
        ip: 127.0.0.1
      - hostnames:
        - www.lyb-geek.cn
        ip: 192.168.3.1
      imagePullSecrets:
      - name: default-secret
      containers:
      - name: hello-docker
        image: 192.168.0.1:5002/lybgeek/hello-docker:1.0
        imagePullPolicy: Always
        ports:
         - containerPort: 80
        env:
          - name: ENV
            value: "dev"

核心配置

 spec:
      hostAliases:
      - hostnames:
        - www.lyb-geek.com
        ip: 127.0.0.1
      - hostnames:
        - www.lyb-geek.cn
        ip: 192.168.3.1

配置内容的解释如下图

总结

不知道大家有没有好奇为什么没介绍通过dockerfile的方式,因为dockerfile的方式,我试过在dockerfile文件中配置

RUN echo 'www.lyb-geek.com:127.0.0.1' >> /etc/hosts

不过没生效。也试过将hosts的文件放在项目目录下

通过配置如下内容

COPY hosts /etc/hosts
RUN echo 'www.lyb-geek.com:127.0.0.1' >> /etc/hosts

不过没用。可能配法不对,也有可能是因为被k8s影响到了。不过如果容器是通过k8s来管理,推荐直接通过

配置hostAliases这种方式。其实还有一种方式,就是进入容器内部,直接改hosts文件,就跟我们操作宿主机一样。

不过这种方式不推荐就是,因为容器一重启或者销毁,配置就丢了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • firewalld防火墙开启后无法启动docker问题及解决

    firewalld防火墙开启后无法启动docker问题及解决

    文章描述了在Linux上开启或重启防火墙后,创建docker自定义网络时出现的错误,原因是firewalld和docker在操作iptables时发生了冲突,文章提供了两种解决办法:1. 重启Docker服务;2. 让Docker绕过firewalld
    2025-12-12
  • 使用Dockerfile脚本定制镜像的方法

    使用Dockerfile脚本定制镜像的方法

    Dockerfile 是⼀个⽂本⽂件,其内包含了⼀条条的指令(Instruction),每⼀条指令构建⼀层,因此每⼀条指令的内容,就是描述该层应当如何构建,这篇文章主要介绍了使用Dockerfile脚本定制镜像,需要的朋友可以参考下
    2022-07-07
  • docker容器内网络请求缓慢问题解决

    docker容器内网络请求缓慢问题解决

    在使用docker的过程中发现了几个问题,在docker里进行的网络请求经常会失败,这篇文章主要介绍了docker容器内网络请求缓慢问题解决
    2019-01-01
  • Docker可视化ui管理工具Portainer安装及使用解析

    Docker可视化ui管理工具Portainer安装及使用解析

    这篇文章主要介绍了Docker可视化ui管理工具Portainer安装及使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • docker程序镜像的安装流程

    docker程序镜像的安装流程

    镜像相当于容器的"源代码",docker 镜像文件类似于 Java 类模板,而 docker 容器实例类似于 Java 中 new 出来的实例对象,这篇文章主要介绍了docker程序镜像的安装,需要的朋友可以参考下
    2024-01-01
  • Docker+Nginx+KeepaLived实现Nginx一主一从高可用方式

    Docker+Nginx+KeepaLived实现Nginx一主一从高可用方式

    在CentOS7主从服务器上部署Nginx容器并配置Keepalived实现高可用,通过虚拟IP自动切换,主从均需安装Keepalived,配置健康检查脚本监控Nginx状态,故障时自动重启或切换虚拟IP,需关闭防火墙和SELinux,并确保脚本有执行权限
    2025-07-07
  • Docker网络之单host网络及使用案例

    Docker网络之单host网络及使用案例

    本文重点给大家讲解Docker单主机网络的相关知识及使用案例,重点是使用案例,感兴趣的朋友一起看看吧
    2017-08-08
  • 浅谈Docker如何自定义host文件

    浅谈Docker如何自定义host文件

    本文主要介绍了Docker如何自定义host文件,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Docker 实现在线集成开发环境实例详解

    Docker 实现在线集成开发环境实例详解

    这篇文章主要介绍了Docker 实现在线集成开发环境实例详解的相关资料,这里对实现在线集成开发环境,进行了详细的介绍及实现,需要的朋友可以参考下
    2016-11-11
  • docker 跨平台构建镜像的示例详解

    docker 跨平台构建镜像的示例详解

    这篇文章主要介绍了docker跨平台构建镜像的案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09

最新评论