【问题标题】:How to connect to rabbitmq in one docker container from a service sitting in another如何从位于另一个容器中的服务连接到一个 docker 容器中的 rabbitmq
【发布时间】:2019-07-23 06:53:34
【问题描述】:

我正在使用以下 docker-compose.yaml 为 rabbitmq 和另一个容器启动 spring boot 服务

version: '3'
services:
  messaging:
    image: "messaging"
    ports: 
     - "7878:9876"
    depends_on:
     - rmq
  rmq:
    image: "rabbitmq:management"
    hostname: "rabbitmqhost"
    container_name: "rabbit-mq"
    ports: 
     - "15672:15672"
     - "5672:5672"

现在可以通过http://localhost:15672/ 访问rabbitmq 管理,并且可以通过http://localhost:7878 访问服务

该服务应该将消息推送到rabbitmq。当我点击 restAPI http://localhost:7878/sendPersonDetails 时,它无法连接到 rabbitmq。

以下是我得到的错误响应-

error occurred in message handler [org.springframework.integration.amqp.outbound.AmqpOutboundEndpoint@3e66d8c7]; nested exception is org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)

以下是我的application.properties文件-

spring.cloud.stream.bindings.output.destination=person
spring.cloud.stream.bindings.output.content-type=application/json

server.port=9876

如何更改我的 docker-compose 配置或服务配置以使其正常工作?任何帮助表示赞赏。

【问题讨论】:

    标签: docker rabbitmq containers


    【解决方案1】:

    感谢 docker-compose,您可以从另一个容器通过服务名称 (http://rabbit-mq:port) 访问 rmq 容器。也不需要暴露端口。

    默认情况下,Compose 会为您的应用设置一个网络。服务的每个容器都加入默认网络,并且该网络上的其他容器都可以访问它们,并且它们可以通过与容器名称相同的主机名发现。

    https://docs.docker.com/compose/networking/

    【讨论】:

      【解决方案2】:

      问题是 rabbitmq 容器中的 localhost 与您在主机上看到的 localhost 不同。事实上,每个容器都有一个指向其 IP 的localhost 地址。

      将容器连接在一起的方法是使用docker networks。有关更多详细信息,请参阅其他答案:Connecting two docker containers

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-20
        • 2020-04-25
        • 2019-02-24
        • 1970-01-01
        • 2017-10-15
        相关资源
        最近更新 更多