docker/k8s修改容器hosts文件
docker镜像本质上是一个包含了整个操作系统的文件和目录的rootfs,用户制作镜像的每一步操作都会生成一个层,也就是一个增量的rootfs。docker容器的rootfs由只读层,init层和可读写层。我们的/etc/hosts和/etc/resolv.conf等只对当前容器生效的信息会保留在init层,进行docker commit时不会提交这一层的信息。所以Dockerfile中对/...
·
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文件的内容。
更多推荐
已为社区贡献4条内容
所有评论(0)