背景

最近发现了一个问题,有个项目接口偶尔会出现访问不到的情况,细细排查看下来,原来是因为容器内的日志太大了,触发了回收的阈值,pod 被回收重新调度后,如果随机分配到了其它节点的话,流量可能打不到新建的容器里,其实我们是有日志自动清理机制的,我们项目的日志是在 /data/log 目录下,由容器内部 mount 到宿主机,这是没有问题的,但是编译的 nginx 基础镜像里的日志是指到 /data 目录下的,所以导致 nginx 的日志文件在容器内,无法自动清理,nginx日志变得很大后,就引发了上述问题。最佳的解决方案就是改基础镜像喽,修改 nginxaccesserror 日志的路径,指到 /data/log 下,这样就可以 mount 到宿主机,进行日志自动清理了。

问题

修改了 nginx 基础镜像后,重新编译居然失败了,以前可以运行的 RUN yum install -y xxx 突然运行报错了,错误信息如下:

Rpmdb checksum is invalid: dCDPT(pkg checksums): sudo.x86_64 0:1.8.6p3-29.el6_9 - u

调研了一圈发现有人说是 rpm 数据库损坏需要重建。因此需要在 yum install ... 前使用 rpm --rebuilddb 重建数据库。比如:

RUN rpm --rebuilddb && yum install -y ...

如果有多条 RUN yum install -y ... 指令,需要在每条之前都加上 rpm --rebuilddb,至此,运行顺利通过,nginx-php-fpm基础镜像编译成功。

最后修改:2023 年 09 月 11 日
如果觉得我的文章对你有用,请随意赞赏