前言
不晓得大家有没有遇到这种场景,部署在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
3、办法三:如果是通过k8s来治理容器,则在能够在创立pod的yaml文件通过hostAliases增加域名IP映射
示例:
apiVersion: apps/v1kind: Deploymentmetadata: namespace: dev name: hello-docker-deployment labels: app: hello-dockerspec: 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/hostsRUN echo 'www.lyb-geek.com:127.0.0.1' >> /etc/hosts
不过没鸟用。可能配法不对,也有可能是因为被k8s影响到了。不过如果容器是通过k8s来治理,举荐间接通过
配置hostAliases这种形式。其实还有一种形式,就是进入容器外部,间接改hosts文件,就跟咱们操作宿主机一样。不过这种形式不举荐就是,因为容器一重启或者销毁,配置就丢了