连接被拒绝:无法从NodeJS Docker容器访问RabbitMQ Docker容器

nlejzf6q  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(302)

我在将一个运行NodeJS的Docker容器连接到另一个运行RabbitMQ的Docker容器时遇到了问题。
我在谷歌上搜索了一下,四处看了看,但没有看到任何专门针对我遇到的问题的东西。我不确定这是我错过的愚蠢的东西还是其他东西。
为了从NodeJS连接,首先我尝试只使用ampqlib库。这会给我一个从NodeJS拒绝的连接。所以我尝试寻找其他替代方法,并找到了Rascal。它是ampqlib的 Package 器。我看到了同样的错误:

Error: connect ECONNREFUSED 192.XXX.XXX.X:5672
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1195:16) {
  errno: -111,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '192.XXX.XXX.X',
  port: 5672,
  broker: Symbol()
}

NodeJS中用于连接的连接字符串:
amqp://${process.env.RABBITMQ_DEFAULT_USER}:${process.env.RABBITMQ_DEFAULT_PASS}@${process.env.RABBITMQ_DEFAULT_HOST}:${process.env.RABBITMQ_DEFAULT_PORT} ;
HOSTRABBITMQ_DEFAULT_HOST=rabbitmq,正如我在下面的docker-compose中所设置的。
这些都是从我检查过的.env文件中拉入的,NodeJS应用程序可以很好地读取它们。
到目前为止,我已测试的项目包括:
1.我可以看到rabbitmq容器正在运行并准备好在端口5672上进行连接:

2022-05-27 15:16:06.422648+00:00 [info] <0.680.0> Ready to start client connection listeners
2022-05-27 15:16:06.429403+00:00 [info] <0.825.0> started TCP listener on [::]:5672
 completed with 4 plugins.
2022-05-27 15:16:06.627770+00:00 [info] <0.680.0> Server startup complete; 4 plugins started.
2022-05-27 15:16:06.627770+00:00 [info] <0.680.0>  * rabbitmq_prometheus
2022-05-27 15:16:06.627770+00:00 [info] <0.680.0>  * rabbitmq_management
2022-05-27 15:16:06.627770+00:00 [info] <0.680.0>  * rabbitmq_web_dispatch
2022-05-27 15:16:06.627770+00:00 [info] <0.680.0>  * rabbitmq_management_agent

1.我可以通过web浏览器在端口15672上使用我通过env变量设置的自定义用户/通行证访问RabbitMQ管理UI。我必须配置NGINX反向代理,但它工作正常。
1.相关片段的docker-compose如下所示:


################# 

  ### rabbit mq ###
  #################
  rabbitmq:
    hostname: rabbitmq
    container_name: rabbitmq
    image: rabbitmq:management
    environment:
      RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER}
      RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS}
      RABBITMQ_DEFAULT_HOST: ${RABBITMQ_DEFAULT_HOST}
    ports:
      # AMQP protocol port
      - '5672:5672'
      # HTTP management UI
      - '15672:15672'

  ######################
  ### nodejs-client ####
  ######################
  api-client:
    container_name: api-client
    restart: unless-stopped
    build: ./packages/market/api-client
    env_file:
      - ./packages/market/api-client/.env
    depends_on:
      - rabbitmq
      - api
    links:
      - rabbitmq
      - api

1.确保用户名/密码没有任何奇怪的字符,可以打破字符串,所以只是使用像测试:测试,但仍然没有运气。
如果任何人以前遇到过这个问题,或者有任何想法或建议,我将非常感激,因为我被难住了!谢谢
1.我没有配置任何Docker网络,除了默认的网络。当我执行docker network inspect app_default时,我可以看到为该网络列出的rabbitmqapi-client容器。

kfgdxczn

kfgdxczn1#

我想通了问题所在:我需要让NodeJS应用程序在尝试连接到RabbitMQ容器之前等待一段时间。我放了一个X1M0N1X等待几分钟,它能够成功连接。
我不知道有什么更好的方法来等待。我以前试过wait-for-it,也许我会写一个定制的bash脚本,专门针对我的设置,只在一段时间后启动NodeJS容器。

相关问题