不同目录构建Docker时.dockerignore规则不生效问题求助
问题原因及解决办法
一、在MyProject目录内构建时忽略规则不生效的可能原因
- 规则语法有误:检查
.dockerignore里的规则是否符合要求:- 路径是相对于构建上下文(当前MyProject目录)的,比如要忽略目录下的
temp文件夹,直接写temp/,别加MyProject/前缀 - 排除规则要加
!(比如!keep-me.txt是保留该文件),注意规则顺序——先写排除项,再写要保留的内容 - 别用绝对路径(比如
/temp这种写法在相对上下文里不生效)
- 路径是相对于构建上下文(当前MyProject目录)的,比如要忽略目录下的
- 文件名写错了:确认文件名是
.dockerignore,没有拼写错误(比如写成dockerignore或者.dockerignore~),在Linux/macOS下可以用ls -a查看是否存在这个隐藏文件 - 规则未匹配目标文件:比如要忽略的是
*.log,但文件实际是.log开头的,或者规则里多写了空格,导致匹配失败
二、在MainProject目录构建时忽略规则不生效的核心原因
Docker构建时只会读取构建上下文根目录下的.dockerignore文件——你执行docker build -f MyProject/Dockerfile .时,构建上下文是MainProject目录,而你的.dockerignore在MyProject子目录里,Docker根本不会去读取它,所以规则完全不起作用。
对应解决办法:
- 移动
.dockerignore到MainProject目录:同时把规则里的路径改成相对于MainProject的格式,比如原来的temp/要改成MyProject/temp/ - 调整构建命令的上下文:执行
docker build -f MyProject/Dockerfile MyProject/,这样构建上下文是MyProject目录,Docker会自动读取该目录下的.dockerignore,规则就能正常生效了
内容的提问来源于stack exchange,提问作者Ishaan Kanwar
相关产品推荐
相关产品推荐

