01-Docker 修改 host、resolv、hostname 文件
Docker 中的 host 等文件
/etc/hosts, /etc/resolv.conf, /etc/hostname
等文件其实并不是存储在 Docker 镜像,而是存在主机上的 /var/lib/docker/containers/(docker_id)
目录下,容器启动时是通过 mount 将这些文件挂载到容器内部的。
因此如果在容器中修改这些文件,修改部分不会存在于容器的 top layer,而是直接写入这 3个文件中。
容器重启后修改内容不存在的原因是 Docker 每次创建新容器时,会根据当前 docker0 下的所有节点的 IP 信息重新建立 hosts 文件。也就是说,你的修改会被 Docker 给自动覆盖掉。
简而言之:就是 openshift 的模式,/etc/resolv.conf
等文件是在 pod 生成的时候插入的,写入的是宿主机的 ip 作为 dns 的寻址,如果需要修改的化,需要在容器生成以后脚本启动以前进行修改。
修改 host 的方式
RUN 命令直接修改 host 文件(不行)
在 dockerfile 中使用 run 命令直接修改 host 文件无任何效果,k8s 中地址解析会将修改的 hosts 进行覆盖docker 启动时加
-add-host
参数(可行)1
2# docker启动时修改多个 hosts 指向
docker run --add-host='www.baidu.com:127.0.0.1' --add-host='server2:127.0.0.2' 容器id -it /bin/bashdockerfile 中使用 sh 脚本修改。
1
2FROM docker-registry.default.svc:5000/myproject/tomcat:8-slim
CMD ["/usr/local/tomcat/bin/startapp.sh"]其中 startapp.sh 为
1
2
3
4
5
6[root@master tomcat]# cat startapp.sh
#!/bin/bash
echo "startup ...."
sed -i "s/:5/:5 single-request/" /etc/resolv.conf
echo "114.114.114.114" >> /etc/resolv.conf
01-Docker 修改 host、resolv、hostname 文件
https://flepeng.github.io/042-云原生-01-Docker-01-Docker-修改-host、resolv、hostname-文件/