docker/k8s修改容器hosts文件

docker镜像本质上是一个包含了整个操作系统的文件和目录的rootfs,用户制作镜像的每一步操作都会生成一个层,也就是一个增量的rootfs。
docker容器的rootfs由只读层,init层和可读写层。
我们的/etc/hosts和/etc/resolv.conf等只对当前容器生效的信息会保留在init层,进行docker commit时不会提交这一层的信息。
所以Dockerfile中对/etc/hosts进行修改,或进入镜像中修改后进行commit都无法真正的修改/etc/hosts的内容。

可以使用以下方法进行修改:

docker修改/etc/hosts

docker修改/etc/hosts,在容器启动时添加如下参数即可向/etc/hosts中添加内容:

--add-host="hostname:host_ip"

k8s修改/etc/hosts

k8s可以通过HostAliases 向 Pod /etc/hosts 文件添加内容,具体如下:

apiVersion: v1
kind: Pod
metadata:
  name: hostaliases-pod
spec:
  hostAliases:
  - ip: "127.0.0.1"
    hostnames:
    - "foo.local"
    - "bar.local"
  - ip: "10.1.2.3"
    hostnames:
    - "foo.remote"
    - "bar.remote"
  containers:
  - name: cat-hosts
    image: busybox
    command:
    - cat
    args:
    - "/etc/hosts"

注: k8s中的/etc/hosts文件由kubelet管理,无论容器重启或pod重启调度,用户修改该hosts文件的任何内容都会在kubelet重新安装后覆盖,因此不要在容器启动后修改hosts文件的内容。

发布了48 篇原创文章 · 获赞 31 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_44723434/article/details/93904699
今日推荐