2013-07-13 77 views
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 

我可以看到該過程吐出正確的結果到標準輸出。它永遠不會返回退出代碼。

+0

一個可能的問題:你似乎沒有被吞噬過程的InputStream和的ErrorStreams。您可能會超出可用於這些流的緩衝區。有關更多信息,請閱讀[Runtime.exec()不會]](http://www.javaworld.com/jw-12-2000/jw-1229-traps.html)。全部閱讀,因爲它很重要。 –

+0

@Hovercraft,我啓動另一個線程來吞噬那些。我測試了沒有docker的運行'echo hello'命令的代碼,它工作正常。 –

+0

當您從命令行運行'/ usr/bin/docker run base echo hello'時會發生什麼?它會退出嗎? –

回答

2

爲什麼要用CLI這僅僅是API周圍的包裝?最好從java直接使用它。

相關問題