【问题标题】:Rabbitmq - Docker connection refused on port 5672Rabbitmq - 端口 5672 上的 Docker 连接被拒绝
【发布时间】:2019-07-31 20:01:03
【问题描述】:

我有一个用 Go 编写的 Web 服务器,可以与 Rabbitmq 和 Mongodb 交互。当我在没有容器的机器上运行所有这些服务器时(rabbitmq url:amqp://guest:guest@localhost:5672),它工作正常。

现在我试图在一个单独的容器中运行所有这些服务。这是我的撰写文件

version: '3'
services:
  rabbitmq:
    image: rabbitmq
    container_name: rabbitmq
    ports:
      - 5672:5672
  mongodb:
    image: mongo
    container_name: mongodb
    ports:
      - 27017:27017
  web:
    build: .
    image: palash2504/collect
    container_name: collect-server
    restart: on-failure
    ports:
      - 3000:3000
    depends_on:
      - rabbitmq
      - mongodb
    links: ["rabbitmq", "mongodb"]

networks:
  default:
    external:
      name: collect-net

这是我的服务器 dockerfile

FROM golang

ENV GO111MODULE=on


WORKDIR /app

COPY go.mod .
COPY go.sum .

RUN go mod download

COPY . .

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

EXPOSE 3000


ENTRYPOINT ["/app/social-cops-assignment"]

我的服务器似乎无法连接到rabbitmq。这是我在运行docker compose up 时收到的日志消息,并且我的配置中的 rabbitmq url 为 amqp://guest:guest@rabbitmq:5672(因为容器名称是 rabbitmq,我将 localhost 替换为 rabbitmq,以便我的服务器能够找到 rabbitmq 容器)

collect-server | 2019/03/10 08:50:51 Failed to connect to AMQP compatible broker at: amqp://guest:guest@rabbitmq:5672/, with errror: dial tcp 172.24.0.3:5672: connect: connection refused

但是 rabbitmq 似乎已经准备好接受连接了。这是来自docker-compose up的rabbitmq日志的最后两行

rabbitmq    | 2019-03-10 08:50:55.164 [info] <0.489.0> accepting AMQP connection <0.489.0> (172.24.0.4:49784 -> 172.24.0.3:5672)
rabbitmq    | 2019-03-10 08:50:55.205 [info] <0.489.0> connection <0.489.0> (172.24.0.4:49784 -> 172.24.0.3:5672): user 'guest' authenticated and granted access to vhost '/'

我是 docker-networking 的新手,我不知道我做错了什么?是我正在使用的rabbitmq地址还是我需要一些关于rabbitmq的额外配置或暴露一些端口?

【问题讨论】:

  • 您可以执行docker-compose restart web 并检查问题是否仍然存在?只要确保你不重启rabbitmq
  • 是的,它仍然存在

标签: docker docker-compose rabbitmq docker-networking


【解决方案1】:

为我解决了两件事:

  1. 确保不要使用 localhost,而是使用容器的名称。对我来说是amqp
amqp:
    image: rabbitmq:3-management-alpine
    ports:
      - "5672:5672"
      - "15672:15672"

那么连接字符串将是amqp://guest:guest@amqp/

【讨论】:

    【解决方案2】:

    定位服务时,不要附加端口。使用rabbitmq,而不是rabbitmq:5672

    我已经在这里回答了你的问题:How to connect to rabbitmq container from the application server container

    所有 docker 网络配置(在上述修复之后)似乎都很好。剩余的错误可能是由于与您的源代码和/或身份验证数据/设置相关的身份验证问题。

    【讨论】:

    • 做到了。用这个amqp://guest:guest@rabbitmq 替换了我的配置文件中的rabbitmq url,但它仍然没有连接。这是错误日志Failed to connect to AMQP compatible broker at: amqp://guest:guest@rabbitmq/, with errror: dial tcp 172.24.0.2:5672: connect: connection refused
    • 哪个库正在打印该错误?我在网上找不到它,除了一篇博客文章,其中包含它作为示例。
    • 我正在使用 go library for amqp godoc.org/github.com/streadway/amqp 此日志消息来自我的应用程序代码,但最后一部分来自库 dial tcp 172.24.0.2:5672: connect: connection refused
    • connection refused 可能与身份验证有关,而不是网络。我已将此添加到我的答案中。
    • 由于登录名和密码中的@字符,我遇到了类似的问题。
    猜你喜欢
    • 2021-01-13
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多