docker - 当 Docker 容器发布端口时,应用程序使用 IP 而不是主机名在 Eureka 中注册

标签 docker spring-cloud docker-swarm spring-cloud-netflix

我将我的 Spring Boot 应用程序 dockerize 并部署到 Docker Swarm。

如果我不发布我的应用程序公开的端口,那么 Eureka 客户端会将主机名作为实例的地址发送,例如 http://ecf28bdd26c5:8080 - 不错

如果我发布端口(使用 Docker 的 --publish 参数),那么它会使用 IP 注册,例如 http://10.255.0.25:8080 -

即使我明确设置 eureka.instance.prefer-ip-address=false 也会这样做.

如何强制 Eureka 客户端真正使用主机名?

最佳答案

通过显式设置主机名 eureka.instance.hostname=${SOME_VAR}或忽略某些接口(interface):

来自 documentation :以下配置将忽略“docker0”接口(interface)和所有以“veth”开头的接口(interface)。

application.yml
spring:
  cloud:
    inetutils:
      ignoredInterfaces:
        - docker0
        - veth.*

您还可以使用正则表达式列表强制仅使用指定的网络地址:
application.yml
spring:
  cloud:
    inetutils:
      preferredNetworks:
        - 192.168
        - 10.0

关于docker - 当 Docker 容器发布端口时,应用程序使用 IP 而不是主机名在 Eureka 中注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45594565/

相关文章:

java - ANTLR4 CharStream 类丢失

spring-boot - 如何更新多个spring config实例客户端

docker-swarm - 在 docker swarm 服务中执行命令

docker - 如何为Docker的多个副本分配资源?

python - Docker:没有这样的选项:--use-wheel

docker - 是否可以使用 Docker 作为提供者和供应者来运行 Vagrant?

docker - 备份Dockerized PostgreSQL数据库

java - 无法使用Spring Cloud配置服务器从配置文件中获取信息

java - 找不到org.springframework.cloud :spring-cloud-dependencies:pom 失败

apache-spark - docker-compose v3 + apache spark,端口 7077 上的连接被拒绝