docker build的--file参数查找Dockerfile路径规则及命令生效疑问
Docker Build 中 --file 参数的路径逻辑解析
背景信息
文件结构
. └── docker-test ├── abc.txt └── Dockerfile
已成功执行的命令
docker build ./docker-testdocker build --file ./docker-test/Dockerfile ./docker-testdocker build --file Dockerfile ./docker-test
疑问点
命令2和3的--file参数路径不同却都能正常执行,不清楚其中逻辑:当为--file指定相对路径时,路径到底是相对于当前目录还是构建上下文(./docker-test/)?是否有明确的官方规则?
逻辑解析
核心规则
--file(简写-f)参数的路径查找优先级是这样的:
- 优先以执行
docker build时的当前工作目录为基准查找文件 - 如果在当前目录找不到,Docker会自动 fallback 到你指定的构建上下文的根目录去查找
对应你的例子
- 命令2:
--file ./docker-test/Dockerfile是基于当前目录的相对路径,直接定位到docker-test子目录里的Dockerfile,自然能生效。 - 命令3:
--file Dockerfile先在当前目录找,发现没有这个文件(当前目录下只有docker-test子目录),于是Docker自动去构建上下文(./docker-test)的根目录找,刚好这里有Dockerfile,所以也能成功执行。
补充说明
- 这个 fallback 逻辑不局限于默认文件名
Dockerfile,不管你指定什么文件名,只要当前目录找不到,都会去构建上下文根目录尝试查找。 - 如果用绝对路径指定
--file,Docker会直接使用该路径,不会触发任何 fallback。 - 为了避免因目录结构变化导致构建失败,建议明确指定相对于当前目录的完整相对路径,不要依赖自动 fallback 逻辑。
内容的提问来源于stack exchange,提问作者mnj
相关产品推荐
相关产品推荐

