Docker API如何像CLI一样使用路径作为镜像构建上下文?
当然可以!其实Docker API本身就支持直接用本地路径作为构建上下文,完全不用手动打包tar包再传URI,只是调用方式和CLI稍微有点不一样,我给你两种实用的实现方法:
使用Docker API直接指定本地构建上下文的方法
方法一:通过multipart/form-data上传本地上下文
这是最贴近docker build PATH体验的方式,你可以直接把本地目录下的文件作为表单数据发送给API,不需要提前打包:
- 请求方法:
POST - 请求端点:
/build - 核心操作:
- 将本地上下文目录的内容作为
multipart/form-data的一部分发送 - 可以通过查询参数
?t=myimage:tag指定镜像标签
- 将本地上下文目录的内容作为
- 用curl模拟的示例命令:
curl -X POST "http://localhost:2375/build?t=myimage:tag" \ -H "Content-Type: multipart/form-data" \ -F file=@./path/to/your/context
这里的
@./path/to/your/context会让curl自动把指定目录打包并作为表单数据发送,Docker守护进程会自动解析这个上下文,和你用CLI执行docker build的行为完全一致。
方法二:使用本地文件系统URI(仅限同主机守护进程)
如果你的Docker守护进程和文件在同一主机,且守护进程有权限访问本地文件系统(默认本地模式是允许的),可以直接用file://协议的URI指定上下文路径:
- 请求方法:
POST - 请求端点:
/build - 请求体是JSON格式,包含
remote字段,值为本地绝对路径的file://URI - 用curl模拟的示例命令:
curl -X POST "http://localhost:2375/build?t=myimage:tag" \ -H "Content-Type: application/json" \ -d '{"remote": "file:///absolute/path/to/your/context"}'
注意这里必须用绝对路径,URI格式是
file://加上完整的绝对路径(比如file:///home/user/my-project),相对路径无法被守护进程正确识别。
一些注意点
- 如果Docker守护进程是远程的,方法二就不适用了,只能用方法一上传上下文
- 确保守护进程的配置允许本地文件访问(默认本地模式没问题,远程模式可能需要调整权限)
- 和CLI一样,上下文路径下的
.dockerignore文件会被守护进程自动识别,用来排除不需要的文件
内容的提问来源于stack exchange,提问作者chingis
相关产品推荐
相关产品推荐

