通过代码执行传输docker命令在docker中运行命令获取结果

1.项目必须是在docker中运行的

2.传输命令 如ps -ef可以获取pid

  public static String deployPid(String cmd) {
    log.info("cmd---:{}", cmd);
    Process p = null;
    try {
      p = Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", cmd});
      int pCode = p.waitFor();
      // 0 ,无错误,等于1说明有错误。
      if (pCode == 1) {
        throw new Exception(getErrorMessage(p));
      }
      StringBuilder sb = new StringBuilder();
      String line = null;
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
      while ((line = reader.readLine()) != null) {
        sb.append(line);
      }
      log.info("result---{}", sb.toString());
      return sb.toString();
    } catch (Exception e) {
      log.error("docker--error:{}", e.getMessage());
      e.printStackTrace();
      throw new BusinessException(
          DeployExcpConstants.ERROR_CODE_CLUSTER_NO_SELECT,
          DeployExcpConstants.ERROR_MSG_MANAGE_CLUSTER_NO_SELECT);
    } finally {
      try {
        if (p != null) {
          p.destroy();
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

3.通过命令执行stargo命令

 /**
   * 得到控制台输出的错误信息
   *
   * @param process
   * @return
   */
  private static String getErrorMessage(Process process) {
    String errMeaage = null;
    try {
      BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));
      String line = null;
      StringBuilder sb = new StringBuilder();
      while ((line = br.readLine()) != null) {
        sb.append(line + "\n");
      }
      errMeaage = sb.toString();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return errMeaage;
  }

  public static String deployment(String cmd) {
    String result = "";
    log.info("cmd---:{}", cmd);
    Process p = null;
    try {
      p = Runtime.getRuntime().exec(cmd);
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
      result = result + reader.readLine();
      log.info("docker--result---{}", result);
      return result;
    } catch (Exception e) {
      log.error("docker--error:{}", e.getMessage());
      e.printStackTrace();
      throw new BusinessException(
          DeployExcpConstants.ERROR_CODE_CLUSTER_NO_SELECT,
          DeployExcpConstants.ERROR_MSG_MANAGE_CLUSTER_NO_SELECT);
    } finally {
      try {
        if (p != null) {
          p.destroy();
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Docker传输代码可以通过构建上下文来实现。构建上下文是指在运行docker build命令时,当前工作目录被称为构建上下文。默认情况下,docker build会查找当前目录的Dockerfile作为构建输入。你可以使用-f参数指定其他的Dockerfile文件。当docker build运行时,首先会将构建上下文传输docker daemon。如果构建上下文包含了不必要的文件,会导致传输时间长、构建所需资源多以及构建出的镜像较大等问题。你可以通过.dockerignore文件来排除构建上下文的某些文件。\[1\] 另外,你还可以通过docker挂载命令来实现在容器运行代码,而无需将数据和代码上传至容器。通过挂载,你可以将本地代码和数据保存在同一个本地文件夹下,并将程序运行产生的数据文件保存在宿主机的目录。这样,你只是借助容器来进行运算而已。\[2\] 总结起来,传输代码Docker可以通过构建上下文和挂载命令来实现。构建上下文用于构建镜像,而挂载命令用于在容器运行代码并保存数据文件。 #### 引用[.reference_title] - *1* *3* [Docker核心技术](https://blog.csdn.net/weixin_44571270/article/details/125959654)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [代码环境配置与Docker](https://blog.csdn.net/weixin_39964660/article/details/113002710)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值