带有docker的Spring Boot Admin解析Docker主机名和IP

时间:2019-04-25 20:12:48

标签: java amazon-web-services spring-boot docker spring-boot-admin

我的问题/设置

我正在尝试构建一个独立的spring boot admin应用程序,我们的所有实例(在网络负载平衡器后面的私有VPC中)都可以注册。 但是我的spring boot应用程序本身在docker容器中运行,因此主机名和ip-address始终默认为容器的主机名和容器ip-address。 而且spring-boot管理员失败并显示

`Request failed with status code 502`
Connection refused: /1XX.17.0.2:8840

因为它找不到具有主机名或IP地址的实际主机。

我尝试过的

我在下面(一个实例)进行了设置,

`spring.boot.admin.client.instance.service-base-url`

但是不能将其用于多个客户端,因为我无法指定逗号分隔的值。

此外,由于在任何时候都可以有n个实例,所以我不想使用以下属性。

`spring.boot.admin.client.instance.service-base-url`

所以我建议在spring-boot-admin git hub页面和issues部分省略spring.boot.admin.client.instance.service-base-url,并在下面使用

`spring.boot.admin.client.instance.prefer-ip=true`

但是由于我的应用程序在docker容器中运行, spring boot客户端使用容器id / ip-address作为主机名/ ip-address注册自己。

我还在我的AWS beantalk文件中尝试了"--net=admin-network","--name client"参数

"containerDefinitions": [
    {
      "name": "cloudy-email",
      "image": "xxx.dkr.ecr.us-east-2.amazonaws.com/sba-admin-repo:xx_2019-04-24_14.36_e9aax8710",
      "command": [ "--net=admin-network","--name client"],
      "Update": "true",

我该如何克服这个问题? 任何指针/引用将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用--network host命令的docker run选项使docker在主机网络中运行。这将使容器采用与主机VM相同的IP地址。另外,检查是否要通过Docker和主机防火墙(安全组)公开管理端口。

更多信息:https://docs.docker.com/network/host/