当 运行 作为 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 对话。
如有任何问题写在这里或转到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
我正在尝试解决我认为是 运行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 对话。
如有任何问题写在这里或转到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