【问题标题】:Communication between spring boot dockerized appsspring boot dockerized 应用程序之间的通信
【发布时间】:2015-12-03 08:11:12
【问题描述】:

我是使用 spring boot 和 docker 的新手,但在运行 docker 容器时遇到了问题。 在调试模式下,应用程序启动没有问题,但是当我将它们作为容器运行时,出现了问题。 例如,我的服务器配置包含所有 yml 文件,还有 eureka 属性。 配置服务器完美启动,但不是 eureka 服务器,它必须向配置服务器查找它的配置,因为这些:

uri: ${vcap.services.config-service.credentials.uri:http://127.0.0.1:8888}

在尤里卡的日志中我可以找到:

找不到 PropertySource:GET 请求时出现 I/O 错误 "http://127.0.0.1:8888/server-eureka/default":连接被拒绝; 嵌套异常是 java.net.ConnectException: Connection denied

所以我看到尤里卡可以t connect to the config server for a reason I cant 理解。 也许我错过了 docker 文件中的某些内容。

【问题讨论】:

  • 你是否从容器中暴露了 8888 端口?来自 "docs.docker.com/userguide/usingdocker" 当我们将 -P 标志传递给 docker run 命令时,Docker 将镜像中暴露的所有端口映射到我们的主机。
  • 是的,当然,我用过 docker run -d -p 8888:8888 -t server/server-config 可以通过172.20.xx.xx:8888/env访问属性
  • 也许您需要绑定到 localhost 而不是 172.20.xx.xx 此处提到的 serverfault.com/questions/565294/…
  • 我得到了同样的结果
  • 你是在不同的虚拟机还是在同一个虚拟机上运行容器?

标签: java spring docker spring-boot


【解决方案1】:

如果您不使用 docker 链接容器,则只能使用公共 IP 地址。 Docker 将为每个正在运行的容器分配一个自己的 IP 地址,默认情况下无法访问。只有当您开始公开端口时,才会有一个 iptables 条目将主机公共 ip 地址和给定端口链接到 docker 容器的内部使用端口和(动态分配的)ip 地址。这也是 127.0.0.1 不起作用的原因,因为它会查看容器本地上下文,但服务没有运行。

【讨论】:

  • 你是对的!我用机器 ip 更改了值,它可以工作。
猜你喜欢
  • 2022-01-06
  • 2021-01-29
  • 1970-01-01
  • 2018-07-10
  • 2021-01-25
  • 2017-12-29
  • 2019-11-06
  • 2019-01-02
  • 2021-12-03
相关资源
最近更新 更多