Selaa lähdekoodia

docker exec water

huangxingxing 8 kuukautta sitten
vanhempi
säilyke
0703480380
1 muutettua tiedostoa jossa 21 lisäystä ja 5 poistoa
  1. 21 5
      src/main/java/com/miniframe/solverjob/DockerExe.java

+ 21 - 5
src/main/java/com/miniframe/solverjob/DockerExe.java

@@ -5,10 +5,12 @@ 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.RemoveContainerCmd;
 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.RemoveContainerCmdImpl;
 import com.github.dockerjava.httpclient5.ApacheDockerHttpClient;
 import com.github.dockerjava.transport.DockerHttpClient;
 import com.miniframe.disaster.service.LogService;
@@ -58,11 +60,25 @@ public class DockerExe {
                 .withDockerHttpClient(httpClient)
                 .build();
         try {
-            dockerClient.stopContainerCmd(stype+"_"+aid.toString())
-                    .withTimeout(1000)
-                    .exec();
-            dockerClient.removeConfigCmd(aid.toString())
-                    .exec();
+            InspectContainerResponse containerInfo = dockerClient.inspectContainerCmd(stype+"_"+aid.toString()).exec();
+            //exited 停止  running  运行
+            String status ="error";
+            try{
+                status= containerInfo.getState().getStatus();
+            }catch (Exception e){
+
+            }
+            if("running".equals(status)){
+                dockerClient.stopContainerCmd(stype+"_"+aid.toString())
+                        .withTimeout(1000)
+                        .exec();
+            }
+            if("exited".equals(status)){
+                RemoveContainerCmd removeContainerCmd = dockerClient.removeContainerCmd(stype+"_"+aid.toString())
+                        .withForce(true);
+                removeContainerCmd.exec();
+
+            }
             System.out.println("容器已停止: " + aid.toString());
         } catch (Exception e) {
             System.err.println("停止容器失败: " + e.getMessage());