在 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