Docker 主机映射

2021-09-22 container

配置服务器时,经常会修改域名映射,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