【发布时间】:2016-03-30 02:18:53
【问题描述】:
我正在尝试解决我认为运行微服务的常见用例。在这种情况下,我正在使用 spring 云应用程序测试 consul。我正在尝试以两种不同的方式测试领事。第一个在 docker 容器中运行,另一个在 docker 主机上运行。然后我尝试启动一个 Spring Cloud 容器,它将与任一 consul 示例进行对话。
当 spring cloud 应用程序作为 docker 容器运行时,我无法让 spring cloud 应用程序与 consul 对话。当 Spring Cloud 应用程序以主机网络模式运行时,它可以解析 localhost 端口,但如果我希望运行图像的多个实例,这不是一个可接受的解决方案。
下面显示了将这两个服务作为容器运行时我的 docker compose 文件的示例。在这里,我试图通过环境变量在 spring cloud 中设置 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
【问题讨论】:
-
启用
links: - consul1部分后应该可以工作,因为这会导致simpletest 容器的/etc/hosts中有一个条目,因此它将consul1主机名解析为consul1 容器的docker-internal ip .你可以单独测试,也许你的 JAVA_OPTS 没有被使用(被某些脚本设置这些参数)?
标签: java docker spring-cloud microservices consul