Windows 側は Ctrl-R で次のように jmeter を開始します。
-Jremote_hosts
にはスレーブである Docker のホストをカンマ区切りで指定します。
jmeter -Jserver.rmi.ssl.disable=true -Jremote_hosts=192.0.2.123
Docker で次のように jmeter を実行します。イメージは Dockerhub で見つけてきた justb4/jmeter を使っています。気になる人は自前でビルドしても良いでしょう。
-Djava.rmi.server.hostname
にはこの Docker ホストのアドレスを指定します。↑の -Jremote_hosts
と同じになると思います。
docker run --rm --name jmeter -p 1099:1099 -p 60000:60000 justb4/jmeter \ -s -n -j /dev/stdout \ -Jserver.rmi.ssl.disable=true \ -Jserver.rmi.localport=60000 \ -Djava.rmi.server.hostname=192.0.2.123
試行錯誤の跡
最初適当にググって下記でできると思ったもののダメでした。
docker run --rm --name jmeter -p 1099:1099 justb4/jmeter \ -s -n -j /dev/stdout \ -Jserver.rmi.ssl.disable=true \ -Djava.rmi.server.hostname=192.0.2.123
-Djava.rmi.server.hostname
はリッスンアドレスなの? なら 0.0.0.0
で良いのではと思って見るも、やっぱりダメでした。
docker run --rm --name jmeter -p 1099:1099 justb4/jmeter \ -s -n -j /dev/stdout \ -Jserver.rmi.ssl.disable=true \ -Djava.rmi.server.hostname=0.0.0.0
docker jmeter
あたりでググると下記が見つかりました。
うーん? どうも java.rmi.server.hostname
は接続しにきたクライアントが接続する先のアドレスなので Windows から見た Docker ホストのIPアドレスを指定する必要があるっぽい(最初の例が正しい)。
それと、1099 以外のポートも使われているようで、tcpdump してみると 60000 より大きいランダムなポートが使用されていました。-Jserver.rmi.localport
でポートを固定してそのポートも晒すようにします。