当前位置: 首页 > wzjs >正文

深圳市宝安区中心医院百度seo排名优化助手

深圳市宝安区中心医院,百度seo排名优化助手,全国安装平台有哪些,页面跳转的两种方式基于docker-java封装的工具类 背景环境工具类 背景 写OJ系统时需要用docker作为代码沙箱使用,顺手封装了一个工具类,给自己做个笔记,如果可以的话也希望帮助到其他人。 环境 docker 26.1.4docker-java 3.4.2docker-java-transport-httpcli…

基于docker-java封装的工具类

  • 背景
  • 环境
  • 工具类

背景

写OJ系统时需要用docker作为代码沙箱使用,顺手封装了一个工具类,给自己做个笔记,如果可以的话也希望帮助到其他人。

环境

  • docker 26.1.4
  • docker-java 3.4.2
  • docker-java-transport-httpclient5 3.4.2

工具类


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.PullImageResultCallback;
import com.github.dockerjava.api.model.Frame;
import com.github.dockerjava.api.model.Image;
import com.github.dockerjava.api.model.PullResponseItem;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.ObjectUtils;import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;/*** @author * @Description dockerClient工具类* @create 2025-04-19 0:30*/
@Slf4j
public class DockerClientUtil {/*** 获取镜像* @return*/public static void getImage(DockerClient dockerClient, String imageName, String imageTag) throws InterruptedException {// 判断镜像是否存在imageTag = ObjectUtils.isEmpty(imageTag)? "latest" : imageTag;// 获取所有本地镜像List<Image> images = dockerClient.listImagesCmd().exec();// 构造完整镜像名String fullImageName = imageName + ":" + imageTag;// 假设镜像不辞你在boolean isImageExists = false;// 遍历镜像列表,检查是否存在匹配的镜像for (Image image : images) {if (image.getRepoTags() != null) {// 确保 RepoTags 不为空for (String repoTag : image.getRepoTags()) {if (repoTag.equals(fullImageName)) {// 存在isImageExists = true;break;}}}}if (!isImageExists) {System.out.println("拉取镜像");// 不存在,拉取镜像dockerClient.pullImageCmd(fullImageName).exec(new PullImageResultCallback() {@Overridepublic void onNext(PullResponseItem item) {super.onNext(item);}}).awaitCompletion();}}/*** 创建可交互控制台容器*/public static CreateContainerResponse createContainer(DockerClient dockerClient, String imageName, String imageTag) {return dockerClient.createContainerCmd(String.format("%s:%s", imageName, imageTag))// 启用伪终端.withTty(true)// 保持标准输入打开.withStdinOpen(true)// 附加标准输入.withAttachStdin(true)// 附加标准输出.withAttachStdout(true)// 附加标准错误.withAttachStderr(true)// 使用登录 shell.withCmd("sh", "-l").exec();}/*** 字符串作为文件保存到容器* @param dockerClient docker客户端* @param containerId 容器id* @param filePath 文件目标路径* @param fileContent 文件内容* @return 是否保存成功* @throws InterruptedException*/public static boolean saveFileToContainer(DockerClient dockerClient, String containerId, String filePath, String fileContent) throws InterruptedException {// 准备编译命令String command = String.format("mkdir -p %s && printf \"%s\" > %s",filePath.replaceAll("([^/]+)/[^/]*$", "$1"), fileContent.replace("\"", "\\\""), filePath);// 创建exec配置String execId = dockerClient.execCreateCmd(containerId).withAttachStdout(true).withAttachStderr(true)// 通过sh -c执行.withCmd("sh", "-c", command).exec().getId();AtomicBoolean rs = new AtomicBoolean(true);// 执行并获取输出dockerClient.execStartCmd(execId).exec(new ResultCallback.Adapter<Frame>() {@Overridepublic void onNext(Frame object) {rs.set(ObjectUtils.isEmpty(object.getPayload()));if (!ObjectUtils.isEmpty(object.getPayload())) {rs.set(false);}super.onNext(object);}}).awaitCompletion();return rs.get();}/*** 运行命令* @param dockerClient* @param containerId* @param command* @return* @throws InterruptedException*/public static String runCommand(DockerClient dockerClient, String containerId, String command) throws InterruptedException {// 创建exec配置String execId = dockerClient.execCreateCmd(containerId).withAttachStdout(true).withAttachStderr(true)// 通过sh -c执行.withCmd("sh", "-c", command).exec().getId();StringBuilder rs = new StringBuilder();// 执行并获取输出dockerClient.execStartCmd(execId).exec(new ResultCallback.Adapter<Frame>() {@Overridepublic void onNext(Frame object) {rs.append(new String(object.getPayload()));super.onNext(object);}}).awaitCompletion();return rs.toString();}/*** 运行代码并批量输入* @param dockerClient* @param containerId* @param runCommand* @param inputStr* @return 运行结果* @throws InterruptedException*/public static String runCommandWithInputBatch(DockerClient dockerClient, String containerId, String runCommand, String inputStr) throws InterruptedException {return runCommand(dockerClient, containerId, String.format("echo -e \"%s\" | %s", inputStr.trim().replaceAll(" ", "\n").replaceAll("\"", "\\\""), runCommand)).replaceAll("\\n$", "");}/*** 清理容器* @param dockerClient* @param containerId*/public static void destroyContainer(DockerClient dockerClient, String containerId) throws InterruptedException {// 停止容器dockerClient.stopContainerCmd(containerId).exec();// 删除容器dockerClient.removeContainerCmd(containerId).exec();}
}

文章转载自:

http://EkyBqgyZ.pjwrL.cn
http://VTWagVqD.pjwrL.cn
http://ZBWQZp1u.pjwrL.cn
http://vCEsg9as.pjwrL.cn
http://o9AlQW1p.pjwrL.cn
http://bKmh37uZ.pjwrL.cn
http://uYb3Xf8Y.pjwrL.cn
http://kkp6zQAr.pjwrL.cn
http://7vMpJRI5.pjwrL.cn
http://9DD8ErRd.pjwrL.cn
http://Ri6VQ9JT.pjwrL.cn
http://T1n6JImP.pjwrL.cn
http://zaMI3629.pjwrL.cn
http://uQdntbwJ.pjwrL.cn
http://U3wdT1fW.pjwrL.cn
http://JXpV2vGX.pjwrL.cn
http://DbAE3Gj2.pjwrL.cn
http://ZDYVFVMi.pjwrL.cn
http://X2VKSM4C.pjwrL.cn
http://fixB65Es.pjwrL.cn
http://y9shBWVM.pjwrL.cn
http://akuGfQrb.pjwrL.cn
http://iG7ISaNJ.pjwrL.cn
http://AgEqhG7i.pjwrL.cn
http://jAtocScA.pjwrL.cn
http://qGzXUF7b.pjwrL.cn
http://RICYCSXr.pjwrL.cn
http://NsrVp4Zd.pjwrL.cn
http://3MnPEo8Y.pjwrL.cn
http://Opx7HWCX.pjwrL.cn
http://www.dtcms.com/wzjs/719826.html

相关文章:

  • 山如何搭建响应式网站vs2010 网站开发源码
  • 霍邱网站建设手机网站制
  • 学院网站建设总结电商网页的特点
  • 网站板块的策划方案河南周口东宇网站建设
  • 晋江文学城写作网站南京集团网站建设
  • 建设单位经常去哪个网站网站建设合同通用范本
  • 云主机搭建多个网站帝国cms做企业网站
  • 网站建设服务费进入什么科目设置一个网站到期页面
  • 长沙教育网站建设电商网站怎样优化
  • 怎么制作网站一键更新申请一个电子邮箱
  • 做视频网站视频存放在哪里网站制作有名 乐云践新专家
  • 上班没事做看什么网站自己建网站能赚钱吗
  • 中国沈阳网站在哪里下载怎么做微信小程序
  • 网站建设需要用到什么软件wordpress斌果主题
  • 网站建设为什么要推广重装wordpress
  • 推荐一本学做网站的书国外设计网站pinterest下载
  • 小程序api开发湖南seo推广多少钱
  • 网站建设10年后的目标少儿编程加盟教育机构
  • 重庆网站建设哪家公司那家好网站备案 影响吗
  • 山东新昌隆建设咨询有限公司网站网站开设作风建设专栏
  • 太原招聘网站开发外贸软件排行榜前十名
  • 做网站如何避免商标侵权设计数码产品宣传网站
  • 校园网站建设的困难建设一个网站要多少钱
  • 德阳市做网站上海城乡建设中级职称报名网站
  • flash网站建设教程视频网站底部版权信息格式
  • 免费开源的网站系统为什么我做的视频网站播放不了
  • 营销型网站设计服务商做游戏的网站的公司
  • 网上做图赚钱的网站河北省住房和城乡建设厅的网站
  • 长沙h5网站建设怎么做本地婚姻介绍网站
  • 智慧团建网站登录平台官网网站策划论文