在 AWS EB 上的 docker 中远程调试 JVM
Remote debugging JVM in docker on AWS EB
我有一张 docker 图片,我在其中启动了 jstatd -p 1099
,然后是我的 Java 应用程序。我还在 docker 文件中公开了端口 1099。
我已经将此 docker 映像部署到 AWS ElasticBeanstalk,我可以从 EB 日志中看到该端口已公开。
/var/log/docker-ps.log
-------------------------------------
'docker ps' ran at Fri Jun 17 04:23:02 UTC 2016:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3199a65e216 8b9c53bb10b6 "/app/run.sh" 5 minutes ago Up 5 minutes 1099/tcp, 8080/tcp jolly_carson
我现在想使用 VisualVM 分析应用程序。如何找到要连接的正确 ip?尝试在端口 1099 上远程登录到应用的域名超时。
容器的端口没有绑定到实例的端口,这很好,因为你不想公开你的调试接口。可以通过以下方式找到容器的 IP 地址:
$ sudo docker ps
$ sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container_id>
启动一个 SSH 隧道,该隧道从本地端口 5005 到该 IP 地址和盒子上的端口 5005。
$ ssh ec2-user@ec2-54-204-111-222.compute-1.amazonaws.com -L 5005:<ip>:5005 -N
或者您可以通过 iptables
配置端口转发
$ sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' stupefied_swartz
172.17.0.2
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 5005 -j REDIRECT --to-destination 172.17.0.2:5005
我有一张 docker 图片,我在其中启动了 jstatd -p 1099
,然后是我的 Java 应用程序。我还在 docker 文件中公开了端口 1099。
我已经将此 docker 映像部署到 AWS ElasticBeanstalk,我可以从 EB 日志中看到该端口已公开。
/var/log/docker-ps.log
-------------------------------------
'docker ps' ran at Fri Jun 17 04:23:02 UTC 2016:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3199a65e216 8b9c53bb10b6 "/app/run.sh" 5 minutes ago Up 5 minutes 1099/tcp, 8080/tcp jolly_carson
我现在想使用 VisualVM 分析应用程序。如何找到要连接的正确 ip?尝试在端口 1099 上远程登录到应用的域名超时。
容器的端口没有绑定到实例的端口,这很好,因为你不想公开你的调试接口。可以通过以下方式找到容器的 IP 地址:
$ sudo docker ps
$ sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container_id>
启动一个 SSH 隧道,该隧道从本地端口 5005 到该 IP 地址和盒子上的端口 5005。
$ ssh ec2-user@ec2-54-204-111-222.compute-1.amazonaws.com -L 5005:<ip>:5005 -N
或者您可以通过 iptables
$ sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' stupefied_swartz
172.17.0.2
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 5005 -j REDIRECT --to-destination 172.17.0.2:5005