diff --git a/pom.xml b/pom.xml index d70df0f..f1b2d1e 100644 --- a/pom.xml +++ b/pom.xml @@ -336,6 +336,37 @@ 2.4.0 + + + com.github.docker-java + docker-java + 3.2.13 + + + + + com.github.docker-java + docker-java-transport-httpclient5 + 3.2.13 + + + + org.apache.httpcomponents.client5 + httpclient5 + 5.2 + + + + + org.apache.httpcomponents.core5 + httpcore5 + 5.2 + + + + + + diff --git a/src/main/java/com/guwan/backend/config/DockerConfig.java b/src/main/java/com/guwan/backend/config/DockerConfig.java new file mode 100644 index 0000000..42c61d8 --- /dev/null +++ b/src/main/java/com/guwan/backend/config/DockerConfig.java @@ -0,0 +1,37 @@ +package com.guwan.backend.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.core.DockerClientBuilder; +import com.github.dockerjava.core.DefaultDockerClientConfig; +import com.github.dockerjava.transport.DockerHttpClient; +import com.github.dockerjava.httpclient5.ApacheDockerHttpClient; + +import java.time.Duration; + +@Configuration +public class DockerConfig { + + @Bean + public DockerClient dockerClient() { + // 配置 Docker 主机 + DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder() + .withDockerHost("tcp://localhost:2375") // 设置 Docker 主机地址 + .build(); + + // 创建 ApacheHttpClient5 实现 + DockerHttpClient httpClient = new ApacheDockerHttpClient + .Builder() + .dockerHost(config.getDockerHost()) + .maxConnections(100) + .connectionTimeout(Duration.ofSeconds(30)) + .responseTimeout(Duration.ofSeconds(45)) + .build(); + + // 创建 Docker 客户端并返回 + return DockerClientBuilder.getInstance(config) + .withDockerHttpClient(httpClient) + .build(); + } +} diff --git a/src/main/java/com/guwan/backend/controller/CommonController.java b/src/main/java/com/guwan/backend/controller/CommonController.java index 844e43e..fd73664 100644 --- a/src/main/java/com/guwan/backend/controller/CommonController.java +++ b/src/main/java/com/guwan/backend/controller/CommonController.java @@ -286,8 +286,8 @@ public class CommonController { // 使用 JSONObject 构造JSON JSONObject jsonObject = new JSONObject(); - jsonObject.put("input", input); - jsonObject.put("voice", voiceModel); + jsonObject.putOpt("input", input); + jsonObject.putOpt("voice", voiceModel); String jsonInputString = jsonObject.toString(); System.out.println(jsonInputString); diff --git a/src/main/java/com/guwan/backend/controller/DockerController.java b/src/main/java/com/guwan/backend/controller/DockerController.java new file mode 100644 index 0000000..a357936 --- /dev/null +++ b/src/main/java/com/guwan/backend/controller/DockerController.java @@ -0,0 +1,60 @@ +package com.guwan.backend.controller; + +import com.github.dockerjava.api.model.Container; +import com.github.dockerjava.api.model.Image; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.api.model.Info; + +import java.util.Arrays; +import java.util.List; + +@RestController +@RequestMapping("/api/common") +public class DockerController { + + private final DockerClient dockerClient; + + @Autowired + public DockerController(DockerClient dockerClient) { + this.dockerClient = dockerClient; + } + + @GetMapping("/docker-info") + public String getDockerInfo() { + Info info = dockerClient.infoCmd().exec(); // 获取 Docker 守护进程的信息 + + + System.out.println("info = " + info); + + return info.toString(); // 将 Docker 信息返回到 HTTP 响应 + } + + + /** + * 获取镜像列表 + * + * @param + * @return + */ + @GetMapping("/imageList") + public List imageList() { + List imageList = dockerClient.listImagesCmd().withShowAll(true).exec(); + + System.out.println("imageList = " + imageList); + return imageList; + } + + + @GetMapping("/listContainers") + public List listContainers() { + List exec = dockerClient.listContainersCmd().exec(); + + exec.forEach(container -> + System.out.println("name = " + Arrays.toString(container.getNames()))); + return exec; + } +} diff --git a/src/main/java/com/guwan/backend/service/DockerService.java b/src/main/java/com/guwan/backend/service/DockerService.java new file mode 100644 index 0000000..573a990 --- /dev/null +++ b/src/main/java/com/guwan/backend/service/DockerService.java @@ -0,0 +1,23 @@ +package com.guwan.backend.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.api.model.Info; + +@Service +public class DockerService { + + private final DockerClient dockerClient; + + // 通过构造函数注入 DockerClient + @Autowired + public DockerService(DockerClient dockerClient) { + this.dockerClient = dockerClient; + } + + public void printDockerInfo() { + Info info = dockerClient.infoCmd().exec(); // 获取 Docker 守护进程的信息 + System.out.println(info.toString()); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 9816f89..4d01936 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -222,3 +222,6 @@ xxl: logpath: logs/xxljob-logs logretentiondays: 7 +docker: + host: tcp://localhost:2375 + api-version: 1.45 diff --git a/src/test/java/com/guwan/backend/TestOj.java b/src/test/java/com/guwan/backend/TestOj.java new file mode 100644 index 0000000..443ce53 --- /dev/null +++ b/src/test/java/com/guwan/backend/TestOj.java @@ -0,0 +1,75 @@ +package com.guwan.backend; + +import cn.hutool.json.JSONObject; +import okhttp3.*; + +import java.io.IOException; + +public class TestOj { + public static void main(String[] args) throws IOException { + OkHttpClient client = new OkHttpClient(); + + MediaType mediaType = MediaType.parse("application/json"); + +// + JSONObject jsonObject = new JSONObject(); + jsonObject.putOpt("language_id", 91); + jsonObject.putOpt("source_code", "class Main {\n" + + "\n" + + "\n" + + " public static void main(String[] args) {\n" + + " System.out.println(twoSum());\n" + + " }\n" + + " public static int twoSum() {\n" + + + + + + + " return 1;\n" + + " }\n" + + "}"); + jsonObject.putOpt("stdin", "SnVkZ2Uw"); + + String jsonInputString = jsonObject.toString(); +// +// String jsonInputString = jsonObject.toString(); +// System.out.println(jsonInputString); + + RequestBody body = RequestBody.create(mediaType, + jsonInputString); + Request request = new Request.Builder() + .url("https://judge0-ce.p.rapidapi.com/submissions?base64_encoded=false&wait=true&fields=*") + .post(body) + .addHeader("x-rapidapi-key", "42c1d2d793mshf3e3050425b2b1bp142fe6jsn9d9553e51070") + .addHeader("x-rapidapi-host", "judge0-ce.p.rapidapi.com") + .addHeader("Content-Type", "application/json") + .build(); + + Response response = client.newCall(request).execute(); + + System.out.println("response = " + response); + +// OkHttpClient client = new OkHttpClient(); +// +// Request request = new Request.Builder() +// .url("https://judge0-ce.p.rapidapi.com/languages") +// .get() +// .addHeader("x-rapidapi-key", "42c1d2d793mshf3e3050425b2b1bp142fe6jsn9d9553e51070") +// .addHeader("x-rapidapi-host", "judge0-ce.p.rapidapi.com") +// .build(); +// +// Response response = client.newCall(request).execute(); + + // 检查请求是否成功 + if (response.isSuccessful()) { + // 获取并打印响应体内容 + String responseBody = response.body().string(); // 读取响应体内容为字符串 + System.out.println(responseBody); + } else { + System.out.println("Request failed. Code: " + response.code()); + } + + + } +}