正确编写的.dockerignore在Docker镜像构建时未生效问题咨询
.dockerignore规则未生效问题原因及排查方案
常见触发原因
- .dockerignore文件缺失或命名错误
这是最高发的问题:- 检查文件是否存放在构建上下文根目录(也就是你执行
docker build命令时最后指定的路径,此处为当前工作目录) - 确认文件名完全为
.dockerignore,无多余后缀(Windows环境下默认隐藏后缀名,很容易出现文件实际名为.dockerignore.txt的问题) - 检查Git仓库的
.gitignore规则,是否误将.dockerignore加入了忽略列表,导致CI拉取代码时根本没有拿到该配置文件
- 检查文件是否存放在构建上下文根目录(也就是你执行
- CI前置任务覆盖了构建上下文
你当前的CI配置中,build阶段配置了dependencies: - generate tag,会自动拉取前置generate tag任务的所有制品到当前工作目录:- 若前置任务的制品包含CHANGELOG、VERSION等你要忽略的文件,不会触发.dockerignore的排除逻辑(.dockerignore仅在构建上下文加载阶段过滤文件,制品拉取是Docker构建前的CI操作)
- 若前置任务的制品未包含
.dockerignore,甚至可能直接覆盖删除工作目录原有的.dockerignore文件,导致规则完全不生效
- 规则验证逻辑错误
你可以在CI的before_script阶段加入如下命令,直接确认构建前的环境状态:ls -la # 确认.dockerignore是否存在,以及目录下所有文件列表 cat .dockerignore # 确认配置内容是否符合预期
规则例外说明
只有两类文件不受.dockerignore规则限制:
- 构建时指定的Dockerfile文件(包括使用
-f参数指定的自定义名称Dockerfile) - .dockerignore配置文件本身
除此之外所有文件都会遵循.dockerignore的过滤规则,没有其他例外。
内容的提问来源于stack exchange,提问作者Jesaya Fernando Napitupulu
相关产品推荐
相关产品推荐

