首页 > 解决方案 > 使用 docker 的 Spring Boot 管理员解析 docker 主机名和 IP

问题描述

我的问题/设置

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

`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.client.instance.service-base-url所以我接受了在 spring-boot-admin git hub 页面和问题部分省略的建议,并在下面使用

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

但是由于我的应用程序在 docker 容器中运行,因此 Spring Boot 客户端使用容器 id/ip-address 作为主机名/ip-address 进行注册。

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

"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",

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

标签: javaamazon-web-servicesspring-bootdockerspring-boot-admin

解决方案


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

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


推荐阅读