Java.io.IOException:error=2,在Java中执行curl时没有这样的文件或目录
我正在使用curl进行基于证书的/x509身份验证 ` ` 但有例外吗`Java.io.IOException:error=2,在Java中执行curl时没有这样的文件或目录,java,docker,curl,x509certificate,Java,Docker,Curl,X509certificate,我正在使用curl进行基于证书的/x509身份验证 ` ` 但有例外吗` 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.la
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)
原因:java.io.IOException:error=2,没有这样的文件或目录
位于java.lang.UNIXProcess.forkAndExec(本机方法)
位于java.lang.UNIXProcess(UNIXProcess.java:247)
在java.lang.ProcessImpl.start(ProcessImpl.java:134)处
位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
`
假设应用程序和身份验证服务在Ubuntu上的docker容器中运行,并且在我手动进入应用程序docker容器并执行上面的curl命令时工作正常。
请从process builder文档中获得帮助: 正确的方法是使用作为单独字符串传递的参数调用它,否则它将无法工作。此外,为了在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
您是否可以尝试在root或sudojava下运行JVM。。。。 它可能没有足够的权限供JVM使用。的可能重复项
Runtime.getRuntime().exec(command); //Here you pass the whole command as a string