在AWS EB上远程调试docker中的JVM

时间:2016-06-17 04:28:00

标签: docker elastic-beanstalk visualvm

我有一个docker镜像,我在其中启动jstatd -p 1099,然后启动我的Java应用程序。我还在dockerfile中公开了端口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上远程登录到应用程序的域名。

2 个答案:

答案 0 :(得分:1)

容器的端口未绑定到实例的端口,这很好,因为您不想公开公开调试接口。可以在以下位置找到容器的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

答案 1 :(得分:1)

或者您可以通过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