Docker通过Kaniko构建时COPY指令未成功复制supervisord.conf文件
问题根因
这个是Kaniko构建工具和基础镜像预设VOLUME路径的典型兼容问题:
你使用的基础镜像大概率已经提前将/etc/supervisor/conf.d/声明为VOLUME挂载点,Kaniko的实现逻辑和原生Docker Build不同,不允许往已经声明为VOLUME的目录写入并持久化文件,即使你在构建过程中COPY了文件、且临时层中能查到文件存在,最终这些文件也不会被打包到镜像的持久化层中。
可直接落地的解决方案
方案1:修改配置文件存放路径(最推荐)
避开基础镜像预设的VOLUME目录,把supervisord配置文件放到非VOLUME路径即可,修改Dockerfile如下:
# 把配置文件放到/etc目录下,避开VOLUME路径 COPY php-config/supervisord.conf /etc/supervisord.conf # 同步修改启动命令的配置路径 CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
方案2:调整基础镜像
如果必须保留原目录路径,需要重新制作你的基础镜像,删除其中/etc/supervisor/conf.d/对应的VOLUME声明即可。
方案3:升级Kaniko版本
部分旧版本Kaniko存在文件快照丢失的已知bug,将GitLab CI中使用的Kaniko镜像升级到最新稳定版,可解决部分非VOLUME原因导致的文件丢失问题。
验证方法
你可以先在本地用原生docker build构建同一份Dockerfile,如果本地构建出的镜像中supervisord.conf文件正常存在,只有Kaniko构建的镜像丢失文件,即可100%确认是VOLUME路径兼容问题。
内容的提问来源于stack exchange,提问作者Little Code
相关产品推荐
相关产品推荐

