当 运行 作为 Docker 容器时,Java Spring 不会与 Consul 对话

Java Spring will not talk to Consul when run as a Docker container

我正在尝试解决我认为是 运行ning 微服务的常见用例。在这种情况下,我正在使用 spring 云应用程序测试 consul。我正在尝试以两种不同的方式测试领事。第一个是 运行ning 在 docker 容器中,另一个是 运行ning 在 docker 主机上。然后我试图启动一个 spring 云容器,它将与任一领事示例进行对话。

当 spring 云应用程序 运行 作为 docker 容器时,我无法让 spring 云应用程序与 consul 对话。当 spring 云应用程序是 运行 主机网络模式时,它可以解析本地主机端口,但如果我希望 运行 的多个实例,这不是一个可接受的解决方案图片。

我的 docker 组合文件的示例如下所示 运行 将两个服务都作为容器。在这里,我试图通过环境变量在 spring 云中设置 consul uri,但无法使用各种配置让它工作。如果有人能指出这些功能协同工作的示例,那将非常有帮助。

 consul1:
  image: progrium/consul
  ports:
    - "8400:8400"
    - "8500:8500"
    - "8600:53/udp"
    - "8600:53/tcp"
  environment:
      GOMAXPROCS: 100
      entrypoint: "/bin/consul"
      hostname: consul
      command: agent -log-level=debug -server -config-dir=/config -bootstrap -ui-dir /ui

simpletest:
    build: simpletest
    hostname: simpletest
    environment:  
      JAVA_OPTS: "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n -Dspring.cloud.consul.host=consul1"
    ports:
     - 39041:7051
     - 39052:7055
#     d2fdockerroot_consul1_1 consul
#    links:
#     - consul1

这里有啤酒厂系统的示例 - https://github.com/spring-cloud-samples/brewery。其中一个文件是 CONSUL 的 docker-compose 文件。

https://github.com/spring-cloud-samples/brewery/blob/master/docker-compose-CONSUL.yml

查看代码库中的所有 application-consul.yaml 文件,了解如何设置 Spring 引导应用程序与 consul 对话。

示例:https://github.com/spring-cloud-samples/brewery/blob/master/aggregating/src/main/resources/application-consul.yaml

如有任何问题写在这里或转到spring-cloud gitter https://gitter.im/spring-cloud/spring-cloud

我遇到了完全相同的问题:链接到我的领事容器是不够的。然而,下面为我做了:如here所述,相应的领事主机和端口配置需要放在bootstrap.yml,而不是application.yml

spring:
  cloud:
    consul:
      host: consul
      port: 8500

对应docker-compose.yml:

version: "2.0"

services:
  consul:
    image: consul:latest
    ports:
      - "8500:8500"
my-service:
    build: path/to/dockerfile
    depends_on:
      - consul
    links:
      - consul:consul