配置服务器时,经常会修改域名映射,Linux 中就是 /etc/hosts 文件,不过容器每次启动都会覆盖。
简介
每次 Docker 启动时,对应的 /etc/hosts/
/etc/resolv.conf
/etc/hostname
都会重新生成,这主要是因为每次重启后 IP 地址会被修改,这些文件中的配置可能已经失效,所以启动会动态生成。
这几个文件修改不会保存在容器的 TopLayer 中,而是保存在运行态的目录中,默认是 /var/lib/docker/containers
目录下的所在容器,这也就意味着,在 Dockerfile 和运行态容器中修改是不生效的。
如果要想配置,通常有如下几种方式。
容器
启动时通过 --add-host HostName:IPAddress
添加,可以指定多次。
# docker run -it --add-host host1:192.168.1.1 --add-host host2:192.168.1.2 alpine
/ # cat /etc/hosts
Docker Compose
增加 extra_host
配置项,可以设置多个主机。
version: '2'
services:
service-nginx:
image: nginx
extra_hosts:
- host1:192.168.1.1
- host2:192.168.1.2
K8S
在 YAML 文件中增加如下配置,通过 hostAliases
配置项指定。
spec:
hostAliases:
- hostnames:
- www.lyb-geek.com
ip: 127.0.0.1
- hostnames:
- www.lyb-geek.cn
ip: 192.168.3.1