当我们服务需要使用自定义的域名解析时,就需要修改pod内hosts文件。
而如果我们在pod内部修改后,下次重启依然会丢,所有下面用两种方式实现持久化修改:
1.当集群内所有或者大部分服务都需要修改hosts文件时,我们可以修改CoreDNS的configmap文件
kubectl edit cm -n kube-system coredns
在data里加入hosts{
.....
}
然后重启pod后生效。
2.只针对特定的服务添加hosts内容,此时在dockerfile的文件里添加
提醒:不可用RUN echo "1.1.1.1 www.yx.com">>/etc/hosts
因为尽管构建时修改了hosts,容器在启动时会重新生成这个文件,就会覆盖点修改的hosts.
我们可以写一个修改hosts的脚本,然后在entrypoint里执行这个脚本,用于容器启动执行的命令:
在Dockerfile的同级目录下新将sh脚本,cat >>edithost.sh<<EOF
#!/bin/sh echo "1.1.1.1 www.yx.com">>/etc/hosts exec "$@"
exec "$@" 必须添加,表示用指定的命令代替当前的shell,一旦exec执行成功,指定的命令会取代当前的进程。
在下面dockerfile表示,追加hosts脚本执行完成后用CMD的启动jar命令替代当前的进程,这样就保持了jar程序运行的命令是主进程。
Dockerfile的内容为:
FROM openjdk:17.0.2-slim
ENV LANG=C.UTF-8
ENV TZ=Asia/Shanghai
workdir /app
COPY edithost.sh /app/edithost.sh
ADD myweb-0.0.1-SNAPSHOT.jar ./app.jar
RUN chmod +x edithost.sh
ENTRYPOINT ["sh","edithost.sh"]
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
然后重新docker build构建镜像 ,k8s重启pod即可。
标签:edithost,jar,修改,sh,hosts,pod,k8s From: https://www.cnblogs.com/yangx124/p/18235152