7

我正在尝试设置一个简单的应用程序。它是从https://budgetapp.docsapp.io/拖出来的,打算在公共场所工作。我的任务是以最自动化的方式部署它,并将 java 机器的指标公开(远程 jConsole)。最终,它应该以大约 15 个精确的副本站起来。

对于这项任务,我选择了 AWS Fargate。它很好地设置了应用程序,它给了我管理端口上的指标(它由 Dropwizard 部署)。我挣扎的是监控。它应该是真实的,并且至少显示 CPU 和内存使用情况。我可以在 docker 本地完成,但 Fargate 缺少一件关键的事情。为部署的任务设置主机名。

我得到的错误: Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: 578463faab0f: 578463faab0f: System error。这是由于 /etc/hosts 文件中缺少带有容器的uname -n. 好像不能设置!这有可能以某种方式完成吗?

我正在像这样运行我的 java 服务: java -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1 -Djava.rmi.server.useLocalHostname=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=5000 -Dcom.sun.management.jmxremote.rmi.port=5000 -jar budgetapp.jar server config.yml

我很乐意接受任何建议!

4

3 回答 3

2

这是 ecs 代理中的一个已知问题。您是否尝试过将此作为解决方法:

echo "$(ip a | grep -A2 eth1 | grep inet | awk '{print $2}' | sed 's#/.*##g' ) $(hostname)" >> /etc/hosts

您可以在容器的入口点获取 ip 并修改 /etc/host。

我相信有一个 ecs 代理正在修复,但我在 GitHub 上找不到问题。

于 2018-03-31T22:12:52.693 回答
1

我在 ECS Fargate 上遇到了同样的问题,代码在 docker 和 CI/CD 管道中运行良好。我还没有引导脚本,所以集成 Roy 的解决方案需要做一些工作。

这对我有用:

  1. ecs_bootloader.sh在已经被复制到图像中的目录中创建一个shell 脚本(bin在我的例子中):
#!/bin/bash

echo "$(ip a | grep -A2 eth1 | grep inet | awk '{print $2}' | sed 's#/.*##g' ) $(hostname)" >> /etc/hosts

#My command here:
python bin/run_all.py

修改了我的 ECS 任务定义,将 ENTRYPOINT 和命令更改为:

ENTRYPOINT: bin/ecs_bootstrap.sh
COMMAND:    bin/run_all.py

笔记:

  • 这可以通过从ecs_bootstrap.sh脚本中调用 COMMAND 来改进。(目前 COMMAND 被引导脚本忽略。)
  • 因为我已经将bin文件夹复制到容器中,所以我不必修改我的 Dockerfile。
于 2019-06-04T18:33:26.190 回答
0

感谢所有的帮助。最终答案是我在互联网上阅读的内容和此处的答案的组合。

关键是将 java.rmi.server.hostname 值更改为其外部 IP 地址,这是我在填写 jConsole 表单时将使用的实际地址。(原来这个值不是服务绑定的接口的值,而是外部监控工具用来访问它的IP地址的值。)

同样,在入口点我需要将外部 IP 添加到容器的主机名,只是为了将主机名添加到 /etc/hosts

于 2018-04-05T09:37:31.803 回答