You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于docker-java 3.3.6查询容器资源状态及网络信息的咨询

使用docker-java 3.3.6实现容器资源与网络监控方案

1. 查询容器磁盘占用及最大可占用额度

docker-java 3.3.6没有直接封装磁盘配额的查询方法,但可以通过容器统计信息和容器详情接口组合实现:

获取磁盘占用量

通过statsCmd获取容器实时统计数据,提取磁盘写入/读取的字节数:

StatsResponse stats = dockerClient.statsCmd("容器ID").exec(new ResultCallback<StatsResponse>() {
    private StatsResponse result;

    @Override
    public void onStart(Closeable closeable) {}

    @Override
    public void onNext(StatsResponse statsResp) {
        this.result = statsResp;
        try {
            close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onError(Throwable throwable) {}

    @Override
    public void onComplete() {}

    @Override
    public void close() throws IOException {}
}).awaitCompletion();

// 计算总磁盘写入量(单位:字节)
long diskUsage = stats.getBlkioStats().getIoServiceBytesRecursive().stream()
    .filter(entry -> "Write".equals(entry.getOp()))
    .mapToLong(BlkioStatsEntry::getValue)
    .sum();

获取最大磁盘配额

如果容器配置了磁盘配额,可通过inspectContainerCmd读取容器配置的存储参数:

InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd("容器ID").exec();
Map<String, String> storageOpts = containerInfo.getHostConfig().getStorageOpt();
// 配额值为字节,未配置则返回null
Long maxDiskQuota = storageOpts != null ? Long.parseLong(storageOpts.get("size")) : null;

2. 获取容器网络带宽速率

通过两次采样容器网络统计数据,计算单位时间内的收发字节差,转换为Mbps:

// 第一次采样
StatsResponse firstSample = dockerClient.statsCmd("容器ID").exec(new ResultCallback<StatsResponse>() {
    private StatsResponse result;

    @Override
    public void onStart(Closeable closeable) {}

    @Override
    public void onNext(StatsResponse statsResp) {
        this.result = statsResp;
        try {
            close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onError(Throwable throwable) {}

    @Override
    public void onComplete() {}

    @Override
    public void close() throws IOException {}
}).awaitCompletion();
long firstRx = firstSample.getNetwork().getRxBytes();
long firstTx = firstSample.getNetwork().getTxBytes();
long start = System.currentTimeMillis();

// 间隔1秒后第二次采样
Thread.sleep(1000);

StatsResponse secondSample = dockerClient.statsCmd("容器ID").exec(new ResultCallback<StatsResponse>() {
    private StatsResponse result;

    @Override
    public void onStart(Closeable closeable) {}

    @Override
    public void onNext(StatsResponse statsResp) {
        this.result = statsResp;
        try {
            close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onError(Throwable throwable) {}

    @Override
    public void onComplete() {}

    @Override
    public void close() throws IOException {}
}).awaitCompletion();
long secondRx = secondSample.getNetwork().getRxBytes();
long secondTx = secondSample.getNetwork().getTxBytes();
long end = System.currentTimeMillis();

// 转换为Mbps(1Mbps = 1,000,000比特/秒)
double rxMbps = ((secondRx - firstRx) * 8.0) / ((end - start) / 1000.0) / 1000000.0;
double txMbps = ((secondTx - firstTx) * 8.0) / ((end - start) / 1000.0) / 1000000.0;

3. 应用与Docker的网络连接质量检测

docker-java未封装网络探测功能,可通过在容器内执行系统命令(如ping、iperf3)实现:

延迟检测(ping)

// 在容器内执行ping命令,测试到应用IP的延迟
ExecCreateResponse execCreate = dockerClient.execCreateCmd("容器ID")
    .withCmd("ping", "-c", "4", "应用IP")
    .withAttachStdout(true)
    .withAttachStderr(true)
    .exec();

// 获取命令输出,自行解析平均延迟
dockerClient.execStartCmd(execCreate.getId())
    .exec(new ExecStartResultCallback(System.out, System.err))
    .awaitCompletion();

带宽检测(iperf3)

需确保容器内已安装iperf3,假设应用作为iperf3服务器:

ExecCreateResponse execCreate = dockerClient.execCreateCmd("容器ID")
    .withCmd("iperf3", "-c", "应用IP", "-t", "5")
    .withAttachStdout(true)
    .exec();

// 输出结果包含Mbps单位的带宽数据
dockerClient.execStartCmd(execCreate.getId())
    .exec(new ExecStartResultCallback(System.out, System.err))
    .awaitCompletion();

内容的提问来源于stack exchange,提问作者LionLive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:44:53