在 Docker 官网查阅 API 调用方式
例如: 查询正在运行的容器列表, HTTP 方式如下:
- $ curl --unix-socket /var/run/docker.sock http:/v1.24/containers/JSON
- [{
- "Id":"ae63e8b89a26f01f6b4b2c9a7817c31a1b6196acf560f66586fbc8809ffcd772",
- "Names":["/tender_wing"],
- "Image":"bfirsh/reticulate-splines",
- ...
- }]
分析 API 请求的过程
在本机执行如下命令
curl -v --unix-socket /var/run/docker.sock http:/v1.24/containers/JSON
Java 模拟调用 API 的代码实现
1, 引入 UnixSocket 工具包
- <dependency>
- <groupId>com.GitHub.jnr</groupId>
- <artifactId>jnr-unixsocket</artifactId>
- <version>0.18</version>
- </dependency>
2, 测试代码
- public static void main(String[] args) {
- // 建立 Unix Socket 连接
- File sockFile = new File("/var/run/docker.sock");
- UnixSocketAddress address = new UnixSocketAddress(sockFile);
- UnixSocketChannel channel = UnixSocketChannel.open(address);
- UnixSocket unixSocket = new UnixSocket(channel);
- // 调用 Docker API
- PrintWriter w = new PrintWriter(unixSocket.getOutputStream());
- w.println("GET /v1.24/containers/json HTTP/1.1");
- w.println("Host: http");
- w.println("Accept: */*");
- w.println("");
- w.flush();
- // 关闭 Output, 否则会导致下面的 read 操作一直阻塞
- unixSocket.shutdownOutput();
- // 获取返回结果
- System.out.println("---- Docker Response ----");
- BufferedReader br = new BufferedReader(new InputStreamReader(unixSocket.getInputStream()));
- String line;
- while ((line = br.readLine()) != null){
- System.out.println(line);
- }
- unixSocket.close();
- }
相关文档
Docker API 文档
来源: https://www.cnblogs.com/anoyi/p/12249257.html