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

SpringBoot 整合docker,执行容器服务

我使用以下文章的镜像作为演示镜像,读者有自己的镜像可以使用自己的
TencentARC/GFPGAN人脸恢复Ubuntu-22.04搭建(附带Docker镜像)_tencentarc gfpgan-CSDN博客

1. 封装springboot 启动docker容器的方法

   public String runDockerCommand(String[] command) {
        StringBuilder result = new StringBuilder();
        try {
            // 使用 ProcessBuilder 执行命令
            ProcessBuilder processBuilder = new ProcessBuilder(command);
            processBuilder.redirectErrorStream(true);  // 将标准错误重定向到标准输出
            Process process = processBuilder.start();

            // 读取容器内的执行日志并打印到控制台
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            log.info("====== Docker logs start ======");
            while ((line = reader.readLine()) != null) {
               log.info(line);  // 打印日志到控制台
            }
            log.info("====== Docker logs end  ======");
            // 等待进程执行完毕
            int exitCode = process.waitFor();
            if (exitCode != 0) {
                throw new RuntimeException("Docker 命令执行失败,退出代码: " + exitCode);
            }

        } catch (Exception e) {
            e.printStackTrace();
            return "Docker 命令执行失败: " + e.getMessage();
        }

        return result.toString();  // 返回执行日志
    }

2. 构造启动docker容器的启动命令,并调用启动docker容器的方法

此方法参数可以根据自己镜像所需修改参数

  • inputPath为输入目录,如果用我的镜像的话就需要这个目录下有图片
  • outputPath为图片清晰生成目录
    public void runGFPGAN(String inputPath,String outputPath) {
        // 定义 Docker 命令,使用传入的参数
        String[] command = {
                "docker", "run", "--rm",
                "-v", outputPath + ":/workspace/GFPGAN/results",
                "-v", inputPath + ":/workspace/GFPGAN/inputs/whole_imgs",
                "-e", "INPUT_PATH=/workspace/GFPGAN/inputs/whole_imgs",
                "-e", "OUTPUT_PATH=/workspace/GFPGAN/results",
                "registry.cn-hangzhou.aliyuncs.com/zr-dev/tencentarc:v1.0"
        };

        // 执行 Docker 命令
        this.runDockerCommand(command);
    }

3. 启动测试


http://www.kler.cn/news/319795.html

相关文章:

  • Qt系统相关——事件
  • JavaScript --模版字符串用反引号
  • Qt (19)【Qt 线程安全 | 互斥锁QMutex QMutexLocker | 条件变量 | 信号量】
  • python学习笔记(3)——控制语句
  • Java获取Object中Value的方法
  • 数据结构-3.链表
  • 无人机在隧道中如何实现在无卫星信号下的自主导航
  • 将ipad作为数位板使用教程/出现延迟拖拽怎么办?
  • 在jupyter notebook中取消代理服务器的解决方案
  • 编程遇到问题了?一个命令让 AI 解决你的困惑!
  • Android——内部/外部存储
  • HTTP常见状态码 HTTP的逐步发展(通俗易懂版)
  • 利士策分享,赚钱有道,底线思维不可抛
  • 网络安全-shire写任务计划、反弹shell、写私钥、反序列化
  • 机器学习算法与Python实战 | 三万字详解!GPT-5:你需要知道的一切(上)建议收藏!
  • 性能监控之Python实战SkyWalking链路追踪
  • [java][git]git学习
  • Linux动态库防止逆向编译参数
  • keil的debug功能
  • IT行业的未来:技术变革与创新的持续推动
  • 解决fatal: unable to access ‘https://........git/‘: Recv failure: Operation time
  • ~关于 CAS 机制、ABA问题、偏向锁、synchronized 实现原理、信号量、Callable
  • Prompt最佳实践|如何用参考文本让ChatGPT答案更精准?
  • 深入理解Kubernetes供应链安全:CKS考试核心知识点实践
  • 在 expressjs 中MySQL 的datetime类型,怎么插入数据
  • 使用java实现ffmpeg的各种操作
  • 使用现有的科技或许无法实现对人类智能的模拟
  • 从零开始,Docker进阶之路(一):Docker基础
  • LocalStorage
  • 力扣中等 33.搜索旋转排序数组