パイプ"|"がJavaのruntimeのクラスで使用できない件について

Javaのクラスからdockerに接続しなければいけない事があり、
しかしそのdockerはランダムなportを使用していて、portを調べなければならないと言う。
一つの方法として、runtime execを使い、そのdockerのport番号をgrepする事だ。
最初に書いた実装が以下:

Process p = Runtime.getRuntime().exec("docker port testDocker | grep [\d+$]"); 

そして結果をプリントしてみたら-1が帰ってきた
コマンドライン上ではちゃんと上手くgrepしてくれているのに何故

調べてみたらRuntime クラスで複数のコマンドを纏めて実行したい場合、shellを介さないと行けないようだ。

String[] cmd = {"/bin/sh", "-c", "docker port testDocker | grep [\d+$]"};
Runtime.getRuntime().exec(cmd);

無事port番号を返してくれたのでメモ