package com.miniframe; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.async.ResultCallback; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.command.InspectContainerResponse; import com.github.dockerjava.api.command.LogContainerCmd; import com.github.dockerjava.api.command.PullImageResultCallback; import com.github.dockerjava.api.model.*; import com.github.dockerjava.core.DefaultDockerClientConfig; import com.github.dockerjava.core.DockerClientBuilder; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.command.LogContainerResultCallback; import com.github.dockerjava.httpclient5.ApacheDockerHttpClient; import com.github.dockerjava.transport.DockerHttpClient; import com.miniframe.solverjob.DockerExe; import java.io.Closeable; import java.io.IOException; import java.util.ArrayList; import java.util.List; import static com.github.dockerjava.api.model.MountType.VOLUME; public class DockerTest { public static final String DOCKERHOST="tcp://192.168.0.132:2375/"; public static final String APIVERSION="1.13.1"; public static void main(String[] args) throws InterruptedException { // 初始化 Docker 客户端 // System.out.println("容器已成功停止: " + getDocker(7182031)); ; DockerExe.stopDocker(982,"Water"); } public static String getDocker(Integer aid){ DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder() .withDockerHost(DOCKERHOST) // 设置 Docker 主机地址 .withDockerTlsVerify(false) // 启用 TLS 验证 .withApiVersion(APIVERSION) // 设置 API 版本 .build(); DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder() .dockerHost(config.getDockerHost()) .sslConfig(config.getSSLConfig()) .build(); DockerClient dockerClient = DockerClientBuilder.getInstance(config) .withDockerHttpClient(httpClient) .build(); InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd(aid.toString()).exec(); return containerInfo.getState().getStatus(); // if (containerInfo.getState().equals("exited")) { // System.out.println("容器已成功停止: " + aid.toString()); // } else { // System.out.println("容器状态: " + containerInfo.getState()); // } } private static void fireExec() { DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder() .withDockerHost("tcp://192.168.0.132:2375/") // 设置 Docker 主机地址 .withDockerTlsVerify(false) // 启用 TLS 验证 .withApiVersion("1.13.1") // 设置 API 版本 .build(); DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder() .dockerHost(config.getDockerHost()) .sslConfig(config.getSSLConfig()) .build(); DockerClient dockerClient = DockerClientBuilder.getInstance(config) .withDockerHttpClient(httpClient) .build(); Mount zhtyVMount = new Mount() .withType(MountType.BIND) .withSource("/home/disaster/zhty/") .withTarget("/home/disaster/zhty/") .withReadOnly(false); Mount cephfsVMount = new Mount() .withType(MountType.BIND) .withSource("/cephfs/disaster/") .withTarget("/cephfs/disaster/") .withReadOnly(false); Mount runWaterMount = new Mount() .withType(MountType.BIND) .withSource("/cephfs/disaster/6/2054/fire/runFile.sh") .withTarget("/home/disaster/zhty/Fire/runFire.sh") .withReadOnly(false); List am =new ArrayList<>(); am.add(zhtyVMount); am.add(cephfsVMount); am.add(runWaterMount); //创建容器 CreateContainerResponse container = dockerClient .createContainerCmd("fire:1.0")//镜像名称 .withName("718201")//容器名称 .withHostConfig( HostConfig.newHostConfig() .withMounts(am) ).exec(); dockerClient.startContainerCmd(container.getId()).exec(); System.out.println("容器启动成功,ID: " + container.getId()); } private static void waterExec() throws InterruptedException { DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder() .withDockerHost("tcp://192.168.0.132:2375/") // 设置 Docker 主机地址 .withDockerTlsVerify(false) // 启用 TLS 验证 .withApiVersion("1.13.1") // 设置 API 版本 .build(); DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder() .dockerHost(config.getDockerHost()) .sslConfig(config.getSSLConfig()) .build(); DockerClient dockerClient = DockerClientBuilder.getInstance(config) .withDockerHttpClient(httpClient) .build(); Mount zhtyVMount = new Mount() .withType(MountType.BIND) .withSource("/home/disaster/zhty/") .withTarget("/home/disaster/zhty/") .withReadOnly(false); Mount cephfsVMount = new Mount() .withType(MountType.BIND) .withSource("/cephfs/disaster/") .withTarget("/cephfs/disaster/") .withReadOnly(false); Mount runWaterMount = new Mount() .withType(MountType.BIND) .withSource("/cephfs/disaster/7/1820/water/runWater.sh") .withTarget("/home/disaster/zhty/Water/runWater.sh") .withReadOnly(false); List am =new ArrayList<>(); am.add(zhtyVMount); am.add(cephfsVMount); am.add(runWaterMount); //创建容器 CreateContainerResponse container = dockerClient .createContainerCmd("water:1.0")//镜像名称 .withName("718203")//容器名称 .withHostConfig( HostConfig.newHostConfig() .withMounts(am) ).exec(); dockerClient.startContainerCmd(container.getId()).exec(); System.out.println("容器启动成功,ID: " + container.getId()); // 获取容器日志 LogContainerCmd logContainerCmd = dockerClient.logContainerCmd(container.getId()) .withStdOut(true) .withStdErr(true) .withFollowStream(true); // 使用 ResultCallback.Adapter 处理日志 logContainerCmd.exec(new ResultCallback.Adapter() { @Override public void onNext(Frame frame) { System.out.print(new String(frame.getPayload())); super.onNext(frame); } @Override public void onError(Throwable throwable) { System.err.println("日志获取失败"); throwable.printStackTrace(); super.onError(throwable); } @Override public void onComplete() { System.out.println("日志获取完成"); super.onComplete(); } }).awaitCompletion(); } private static void getLogs() throws InterruptedException { DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder() .withDockerHost("tcp://192.168.0.132:2375/") // 设置 Docker 主机地址 .withDockerTlsVerify(false) // 启用 TLS 验证 .withApiVersion("1.13.1") // 设置 API 版本 .build(); DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder() .dockerHost(config.getDockerHost()) .sslConfig(config.getSSLConfig()) .build(); DockerClient dockerClient = DockerClientBuilder.getInstance(config) .withDockerHttpClient(httpClient) .build(); // 获取容器日志 LogContainerCmd logContainerCmd = dockerClient.logContainerCmd("718203") .withStdOut(true) .withStdErr(true) .withFollowStream(true); // 使用 ResultCallback.Adapter 处理日志 logContainerCmd.exec(new ResultCallback.Adapter() { @Override public void onNext(Frame frame) { System.out.print(new String(frame.getPayload())); super.onNext(frame); } @Override public void onError(Throwable throwable) { System.err.println("日志获取失败"); throwable.printStackTrace(); super.onError(throwable); } @Override public void onComplete() { System.out.println("日志获取完成"); super.onComplete(); } }).awaitCompletion(); System.out.println("1111日志获取完成"); } }