我正在尝试建立一个简单的应用程序。它是从https://budgetapp.docsapp.io/拖出来的,打算在公共场合工作。我的任务是以最自动化的方式部署它,并将java机器的指标公开给公众(远程jConsole)。最终,它应该站在大约15份确切的副本。
对于这个任务,我选择了AWS Fargate。它非常漂亮地设置了这个应用程序,它还给我管理端口上的Metrics (它是由Dropwizard部署的)。我挣扎的是监视。它应该是真实的,并显示至少CPU和mem的使用。我可以在码头上做这件事,但法尔盖特错过了一件关键的事情。为已部署的任务设置主机名。
我得到的错误:Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: 578463faab0f: 578463faab0f: System error。这是由于/etc/host文件中缺少带有容器的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
我很乐意接受任何建议!
发布于 2018-04-05 09:37:31
谢谢你的帮助。最后的答案是我在网上读到的东西和这里的答案的结合。
关键是将java.rmi.server.hostname值更改为其外部IP地址,这是我在填写jConsole表单时将使用的实际地址。(这个值不是绑定服务的接口,而是外部监视工具用来访问它的IP地址的值。)
此外,在entrypoint中,我需要向容器的主机名添加一个外部IP,只是为了将主机名添加到/etc/host
发布于 2018-03-31 22:12:52
这是ecs代理中已知的问题。你试过这样做作为解决办法吗?
echo "$(ip a | grep -A2 eth1 | grep inet | awk '{print $2}' | sed 's#/.*##g' ) $(hostname)" >> /etc/hosts您可以在容器的入口点获取ip并修改/etc/host。
我相信在它的路上有一个ecs代理修复程序,但是我在GitHub上找不到问题。
发布于 2019-06-04 18:33:26
我在ECS Fargate上遇到了同样的问题,它的代码在docker和CI/CD管道中工作得很好。我还没有一个引导脚本,所以这是一个小的工作,集成罗伊的解决方案。
以下是对我起作用的东西:
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: bin/ecs_bootstrap.sh
COMMAND: bin/run_all.py备注:
ecs_bootstrap.sh脚本调用命令来改进这一点。(当前,引导脚本忽略了命令。)bin文件夹复制到容器中,所以不必修改我的Dockerfile。https://stackoverflow.com/questions/49592709
复制相似问题