java - 使用 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",
我该如何克服这个问题?任何指针/引用将不胜感激。
解决方案
--network host
您可以使用命令的选项使 docker 在主机网络中运行docker run
。这将使容器假定主机 VM 的 IP 地址相同。此外,检查您是否通过 Docker 和主机防火墙(安全组)公开管理端口。
推荐阅读
- java - Hibernate JPA 中的@OnetoOne VS @SecondaryTable 注释
- javascript - 如何使通知图标停留在框的右上角?
- devise - 设计不注册用户
- javascript - 解析为 JSON 的 Vue 资源响应具有“未定义”值的属性
- azure - 如何查看 kubernetes limitrange 403 禁止错误
- android - 断言失败:第 65 行第 15 行:“可见!= null”:不正确
- python - 安装 spacy 失败
- javascript - 将新状态设置为现有数组状态
- python - 为什么我的值是非类型而不是字符串?
- sql - 使用 SQL 的表列结构/变化分析