问题
将应用打包成 Docker 镜像后,使用 k8s 发布新版本。应用一直找不到配置文件导致不停地 panic 。。。(慌得一批,幸好 k8s 回滚比较方便😅)
排查
- 检查 Dockerfile 确认 COPY 了配置文件到镜像中
...
WORKDIR /
COPY config /config
...
- 检查代码中,访问该文件的路径 "/config/xxx.yaml" 没问题
- 看了很久,Dockerfile 和代码都没发现问题,并且在本地使用该镜像启动容器也能成功。于是想到是不是 k8s 侧部署的问题,最终发现 k8s Deployment 配置 yaml 中,将容器的 /config 目录挂载出去了。。。
...
containers:
- env:
volumeMounts:
- mountPath: /config
name: volume-xxx
volumes:
- name: volume-xxx
总结
问题比较蠢,但我还是花了很久排查,一直在想是不是 Docker 打包过程有问题;试了很久才想到是不是 k8s 那边配置有问题,希望能帮到和我犯同样错误的人😊