2
我試圖在使用Java的ProcessBuilder的碼頭容器中運行命令。但是,它在等待退出代碼時會掛起。這是爲什麼?爲什麼使用ProcessBuilder運行docker會導致掛起?
ProcessBuilder processBuilder = new ProcessBuilder(Arrays.asList("/usr/bin/docker", "run", "base", "echo", "hello"));
Process process = processBuilder.start();
// ... Spin off another thread to collect stdout and stderr
int exitCode = process.waitFor(); // <-- HANG
我可以看到該過程吐出正確的結果到標準輸出。它永遠不會返回退出代碼。
一個可能的問題:你似乎沒有被吞噬過程的InputStream和的ErrorStreams。您可能會超出可用於這些流的緩衝區。有關更多信息,請閱讀[Runtime.exec()不會]](http://www.javaworld.com/jw-12-2000/jw-1229-traps.html)。全部閱讀,因爲它很重要。 –
@Hovercraft,我啓動另一個線程來吞噬那些。我測試了沒有docker的運行'echo hello'命令的代碼,它工作正常。 –
當您從命令行運行'/ usr/bin/docker run base echo hello'時會發生什麼?它會退出嗎? –