“.”是docker build命令指定的构建上下文起始路径,Docker客户端会将该路径下所有文件递归打包上传至Docker daemon,供构建过程使用,而非仅指定Dockerfile位置或默认当前目录。

构建上下文不是 Docker Desktop 的设置项,它由 docker build 命令显式指定,和 Docker Desktop 本身无关——改不改、怎么改,全看你在终端里执行的那条命令。
docker build 后面那个点(.)到底指什么
这个点是构建上下文的**起始路径**,不是 Dockerfile 位置,也不是当前工作目录的“默认值”。Docker 客户端会把该路径下所有可访问文件(递归)打包发给 Docker daemon(服务端),服务端再基于其中的 Dockerfile 执行构建。
- 如果
Dockerfile不在该路径下,必须用-f参数显式指定,比如docker build -f ./build/Dockerfile . - 如果路径选成
/或C:\,整个磁盘内容都会被上传——轻则超时失败,重则泄露敏感文件 - Windows 上用 PowerShell 执行时,路径中的反斜杠
\可能被误解析,建议统一用正斜杠/或双引号包裹路径,例如docker build -t myapp .而不是docker build -t myapp C:\myproj
如何安全地指定非当前目录作为构建上下文
常见场景:项目根目录下有大量 node_modules、.git、dist 等不需要参与构建的文件,直接 docker build . 会导致上传巨慢甚至失败。
- 在项目根目录创建最小化构建目录,例如
docker-build-context/ - 只把必需文件复制进去:
Dockerfile、package.json、src/、.dockerignore等 - 确保
.dockerignore已存在且生效(它只在构建上下文目录内起作用) - 执行命令:
docker build -t myapp ./docker-build-context
注意:COPY 指令里的源路径只能是构建上下文内的相对路径,比如 COPY src/ /app/src/ —— 如果 src/ 不在 ./docker-build-context/ 里,构建会报错 no such file or directory。
为什么改了 Docker Desktop 设置没用
Docker Desktop 的「Resources → WSL Disk image location」或「Advanced → Disk image size」只影响 WSL2 虚拟磁盘存放位置和大小,和构建上下文完全无关。它不干涉 docker build 命令的行为,也不修改任何构建时的路径逻辑。
- 你看到的「Docker Desktop 设置里没有构建上下文选项」是正常的,因为它本来就不在这里管
- 某些 GUI 工具(如 VS Code Docker 插件)可能默认传入当前打开文件夹作为上下文,但底层仍是调用
docker build命令,本质没变 - 如果构建总卡在 “Sending build context to Docker daemon”,第一反应不是调设置,而是检查上下文路径是否过大、是否有权限问题(比如路径含中文、空格、符号,或某子目录被系统锁定)
真正关键的是每次运行 docker build 时你传进去的那个路径——它决定了 Docker daemon 收到什么,也决定了构建能否成功、多快、是否安全。别被 Docker Desktop 的图形界面带偏了方向。











