使用Docker Engine API在Node.js创建镜像遇URL不匹配错误,如何设置参数?
解决Docker Engine API创建镜像时的“无匹配URL”错误
问题分析
你的代码存在几个关键错误,导致了“无匹配URL”的问题:
- 接口路径错误:你要创建镜像,但误用了容器创建的接口路径
/containers/create,正确的镜像创建接口路径是/images/create。 - 配置键名不匹配:配置对象里的键是
cc,但请求时调用了options.cb,拼写错误导致读取不到正确的请求配置。 - 请求数据未发送:Node.js的
http.request不会自动处理配置里的data字段,需要手动将数据转为JSON字符串并写入请求流。 - 参数字段错误:创建镜像接口的正确参数字段是
fromImage(指定要拉取的镜像名称),而非你写的Image。
修正后的代码
const http = require('http'); const options = { 'cc': { socketPath: '//./pipe/docker_engine', // Windows下的Docker socket路径 method: 'POST', path: '/images/create', // 修正为镜像创建接口路径 headers: { 'Content-Type': 'application/json', }, data: { fromImage: "sampleappp" // 修正为接口要求的参数字段 }, }, } function createImage(){ let responseData = ''; // 使用正确的配置键名cc const apiReq = http.request(options.cc, (apiRes) => { apiRes.on('data', chunk => { responseData += chunk.toString(); }); apiRes.on('end', () => { console.log(`${apiRes.statusCode} - ${options.cc.path}`); console.log(responseData); }); }); apiReq.on('error', err => { console.error('请求错误:', err); }); // 将请求数据转为JSON字符串并写入请求 apiReq.write(JSON.stringify(options.cc.data)); apiReq.end(); } createImage();
补充说明
如果你的需求是从本地Dockerfile构建镜像,需要使用/build接口,参数需要包含Dockerfile内容或构建上下文,但上述代码适用于从镜像仓库拉取并创建镜像的场景。
内容的提问来源于stack exchange,提问作者Rahul mishra
相关产品推荐
相关产品推荐

