在用于容器的Azure Web App中无法访问RabbitMQ容器

时间:2019-01-20 08:19:42

标签: docker docker-compose rabbitmq containers azure-web-app-service

我有以下docker-compose内容:

version: '3.4'

services:
  reporting.service:
    image: xxx.azurecr.io/beta/reporting.service
    environment:
      - ASPNETCORE_ENVIRONMENT=Docker
    ports:
      - "5003:80" 

  messaging.bus:
    image: rabbitmq:3-management
    environment:
      - RABBITMQ_DEFAULT_USER=user
      - RABBITMQ_DEFAULT_PASS=user
      - RABBITMQ_DEFAULT_VHOST=test
    links:
      - reporting.service
    ports:
      - "15672"
      - "5672"

  web.frontend:
    image: xxx.azurecr.io/beta/web.frontend
    ports:
      - "3000:80"

使用docker在我的计算机上本地运行时,一切正常,我的report.service能够毫无问题地连接到messages.bus(RabbitMQ)。

连接字符串如下所示:

"EventBus": {
    "ConnectionString": "amqp://user:user@messaging.bus:5672/test"
  },

当我将图像推送到Azure容器注册表并尝试在Azure Web应用程序中将其用于容器时,reporting.service容器中将引发以下异常:

  

RabbitMQ.Client.Exceptions.BrokerUnreachableException:无   指定的端点可达---> System.AggregateException:一个   或更多错误发生。 (连接失败)--->   RabbitMQ.Client.Exceptions.ConnectFailureException:连接失败   ---> System.Net.Internals.SocketExceptionFactory + ExtendedSocketException:   没有这样的设备或地址

仅供参考,在连接到RabbitMQ时,我在report.service中实现了Polly重试策略,以便在代理不可用的情况下多次执行代码。为了确保RabbitMQ容器已启动并正在运行(我确认还查看了日志)。

我做错了什么?为什么我无法从其他容器中看到RabbitMq实例?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我在 Azure App Services 上遇到了类似的问题,解决问题的方法是使用链接关键字。正如我从您的docker-compose中看到的那样,您以错误的方式链接了它。它在本地工作的原因是因为这些容器位于同一本地网络中。

您是否尝试将 reporting.service 链接到 messaging.bus

还要检查此答案here,docker官方文档here和docker在Azure here上撰写受支持的命令。

我还发现了一篇有趣的文章here,其中介绍了如何根据彼此制作两个容器。

我希望这会有所帮助!