我使用以下文章的镜像作为演示镜像,读者有自己的镜像可以使用自己的
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);
}