【问题标题】:Java.io.IOException: error=2, No such file or directory on executing curl in javaJava.io.IOException:error=2,在java中执行curl时没有这样的文件或目录
【发布时间】:2018-07-31 11:30:35
【问题描述】:

我正在使用 curl 进行基于证书/x509 的身份验证 `

String command = "curl --cert " +certificateFilePath+" --key "+ certificateKeyFilePath+" --insecure "+authUrl;

          ProcessBuilder process = new ProcessBuilder(command); 
            Process p;
            try
            {
                p = process.start();
                 BufferedReader reader =  new BufferedReader(new InputStreamReader(p.getInputStream()));
                    StringBuilder builder = new StringBuilder();
                    String line = null;
                    while ( (line = reader.readLine()) != null) {
                            builder.append(line);
                            builder.append(System.getProperty("line.separator"));
                    }
                    String result = builder.toString();
                    System.out.print("result ------------------:  "+result);

            }catch(Exception e){
                e.printStackTrace();
            }

`

但得到异常`

Caused by: java.io.IOException: error=2, No such file or directory
        at java.lang.UNIXProcess.forkAndExec(Native Method)
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
        at java.lang.ProcessImpl.start(ProcessImpl.java:134)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)

`

鉴于应用程序和身份验证服务在 Ubuntu 上的 docker-container 内运行,并且当我手动进入应用程序 docker-container 并执行上述 curl 命令时工作正常。 请帮忙

【问题讨论】:

标签: java docker curl x509certificate


【解决方案1】:

来自流程构建器文档:

https://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html

正确的方法是使用作为单独字符串传递的参数调用它,否则它将不起作用。此外,为了在 linux 中运行 curl 或在 windows 中运行 dir 等系统命令,您需要调用命令解释器 - sh for linux。所以你的命令应该变成这样:

ProcessBuilder process = new ProcessBuilder("sh", "-c","curl","--cert", certificationPath......); 

或者你可以试试:

Runtime.getRuntime().exec(command);  //Here you pass the whole command as a string  

【讨论】:

    【解决方案2】:

    您可以尝试在 root 下运行 JVM 还是使用 sudo java.... 它可能没有足够的 JVM 权限。

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 2014-05-09
      • 2014-07-19
      • 1970-01-01
      相关资源
      最近更新 更多