【问题标题】:How to connect to rabbitmq container from the application server container如何从应用服务器容器连接到rabbitmq容器
【发布时间】:2019-03-09 11:53:43
【问题描述】:

我是 docker 新手,我正在尝试 dockerize 这个我用 Golang 编写的应用程序。它是一个与rabbitmq和mongodb交互的简单web服务器

它从 toml 文件中获取凭据并将其加载到配置结构中,然后在端口 3000 上启动应用程序服务器。这些是凭据

mongo_server = "localhost"
database = "collect_db"
rabbitmq_server = "amqp://guest:guest@localhost:5672/"

如果它无法连接到这些 url,它会失败并出现错误。以下是我的 docker-compose.yml

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

但它无法在用于本地开发的 url 上与 rabbitmq 连接,即amqp://guest:guest@localhost:5672/

我意识到,rabbitmq 容器可能运行在与配置文件中提供的地址不同的地址上。

我想知道设置任何 env 凭据以能够将我的应用程序连接到 rabbitmq 的正确方法。

还有什么方法最适合更改我的应用程序代码以初始化与外部服务的连接?我正在考虑放弃 config.toml 文件并使用 os.Getenv 和 os.Setenv 来获取连接的 url。

【问题讨论】:

    标签: docker docker-compose rabbitmq


    【解决方案1】:

    本地主机地址是在本地解析的。因此它们不能在容器内工作,因为它们会寻找本地地址(即在容器内)。

    服务可以通过使用服务名称作为地址来相互访问。因此,在 Web 容器中,您可以以 mongodb 为目标。

    你可以试一试:

    mongo_server = mongodb
    database = "collect_db"
    rabbitmq_server = "amqp://guest:guest@rabbitmq/"
    

    建议在撰写文件本身中设置服务目标环境变量:

    #docker-compose.yml
    
    #...other stuff...
    
    web:
        #...other stuff...
        environment:
          RABBITMQ_SERVER: rabbitmq
          MONGO_SERVER: mongodb
        depends_on:
          - rabbitmq
          - mongodb
    
    

    这使您可以在一个地方对配置进行调整。

    附带说明,在我看来,links: [rabbitmq, mongodb] 似乎可以删除。而且我建议不要更改容器名称(除非必要,请删除container_name: collect_service

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多