资讯专栏INFORMATION COLUMN

Java 使用 UnixSocket 调用 Docker API

derek_334892 / 742人阅读

摘要:在官网查阅调用方式例如查询正在运行的容器列表,方式如下分析请求的过程在本机执行如下命令模拟调用的代码实现引入工具包测试代码建立连接调用关闭,否则会导致下面的操作一直阻塞获取返回结果相关文档文档

在 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 工具包

        
            com.github.jnr
            jnr-unixsocket
            0.18
        

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.ucloud.cn/yun/76140.html

相关文章

  • docker进程模型,架构分析

    摘要:与容器内第一个进程进程看创建了这么多子进程,然后到了我们期待的自己中的进程就要被创建了,想想都有点小激动,然而。。。 Docker架构分析 [root@docker-build-86-050 ~]# ls /usr/bin |grep docker docker docker-compose docker-containerd docker-containerd-ctr docker-...

    mingzhong 评论0 收藏0
  • Java 外部函数接口:JNI, JNA, JNR

    摘要:我们知道,发起函数调用,需要构造一个栈帧。构造栈帧的具体实现细节的选择,被称为调用惯例。要想完成这个函数调用逻辑,就要运行时构造栈帧,生成参数压栈和清理堆栈的工作。目前,几乎支持全部常见的架构。 原文:http://nullwy.me/2018/01/java...如果觉得我的文章对你有用,请随意赞赏 遇到的问题 前段时间开发的时候,遇到一个问题,就是如何用 Java 实现 chdir...

    pubdreamcc 评论0 收藏0
  • 如何使用DockerDocker-Compose和Rancher搭建部署Pipeline(四)

    摘要:注册器监视每个守护进程的事件,并在生命周期事件期间自动更新。条件可以包括亲和规则否定至软强制意味着尽可能地避免。当使用通用标记如或部署服务时,可能会出现意外的后果。月日,北京海航万豪酒店,容器技术大会即将举行。 在这篇文章中,我们将讨论如何用Rancher实现consul的服务发现。 如果你还没有准备好,推荐你阅读本系列中先前的文章:第一篇:CI /CD和Docker入门第二篇:使部署...

    13651657101 评论0 收藏0
  • Docker 上运行一个 RESTful 风格的微服务

    摘要:在这里,这个提供了一个风格的接口访问。准备刚刚我们已经成功地在中运行了我们的微服务。对外暴露的端口需要跟服务的端口是一致的。运行是发布一个容器的端口到运行的主机上。 tags: Microservice Restful Docker Author: Andy AiWeibo: NinetyHGitHub: https://github.com/aiyanbo/do... 实现构思 ...

    NotFound 评论0 收藏0
  • 运行在 Docker 上的微服务 - 服务发现与注册

    摘要:运行在上的微服务服务发现与注册在上一节中,我们学习了如何在上构建一个风格的微服务。接下来,我们将学习如何把运行在上的微服务暴露在服务中心上,以便客户端的调用。资源服务在关闭时需要将服务实例在服务中心进行注销操作。响应用户的终止。 运行在 Docker 上的微服务 - 服务发现与注册 tags: Docker Microservice RESTful etcd Author: And...

    陈伟 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<