1

I am using docker-java API to execute docker API in my project. I didn't find any suitable method which lists down docker CPU memory usage as

GET /v1.24/containers/redis1/stats HTTP/1.1 with the help of docker-java API

Dependency

compile group: 'com.github.docker-java', name: 'docker-java', version: '3.1.2'

Code

public static void execute() {
        DockerClient dockerClient = DockerClientBuilder.getInstance().build();
        dockerClient.statsCmd("containerName");  
    }

I didn't get any output

Tell me how to execute docker stats with docker-java api

2 Answers 2

2

This works for me

public Statistics getNextStatistics() throws ProfilingException {
    AsyncResultCallback<Statistics> callback = new AsyncResultCallback<>();
    client.statsCmd(containerId).exec(callback);
    Statistics stats;
    try {
        stats = callback.awaitResult();
        callback.close();
    } catch (RuntimeException | IOException e) {
        // you may want to throw an exception here
    }
    return stats; // this may be null or invalid if the container has terminated
}
Sign up to request clarification or add additional context in comments.

Comments

0

DockerClient is where we can establish a connection between a Docker engine/daemon and our application.

By default, the Docker daemon can only be accessible at the unix:///var/run/docker.sock file. We can locally communicate with the Docker engine listening on the Unix socket unless otherwise configured.

we can open a connection in two steps:

    DefaultDockerClientConfig.Builder config 
  = DefaultDockerClientConfig.createDefaultConfigBuilder();
DockerClient dockerClient = DockerClientBuilder
  .getInstance(config)
  .build();

Since engines could rely on other characteristics, the client is also configurable with different conditions.

For example, the builder accepts a server URL, that is, we can update the connection value if the engine is available on port 2375:

DockerClient dockerClient
  = DockerClientBuilder.getInstance("tcp://docker.baeldung.com:2375").build();

Note that we need to prepend the connection string with unix:// or tcp:// depending on the connection type.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.