当前位置: 首页 > 知识库问答 >
问题:

如何从另一个容器中运行的程序连接到RabbitMQ?[重复]

邵锐
2023-03-14

我有一个项目,其中Rabbit被启动:

services:
  rabbitmq:
    image: rabbitmq:3-management-alpine
    container_name: 'rabbitmq'
    ports:
        - 5672:5672
        - 15672:15672
    volumes:
        - ~/.docker-conf/rabbitmq/data/:/var/lib/rabbitmq/
        - ~/.docker-conf/rabbitmq/log/:/var/log/rabbitmq
    networks:
        - rabbitmq_go_net

networks:
  rabbitmq_go_net:
    driver: bridge

然后我做了另一个连接到这个队列的项目。没有doker,我只是使用localhost作为主机和端口号5672。

我想在docker中用数据库运行另一个项目:

version: '3'

services:
    postgres:
        image: postgres:12
        restart: always
        networks:
            - rabbitmq_go_net
        ports:
            - '5432:5432'    
        volumes:
            - ./db_data:/var/lib/postgresql/data
            - ./app/internal/config/dbconfig/init.sql:/docker-entrypoint-initdb.d/create_tables.sql
        env_file:
            - ./app/internal/config/dbconfig/.env
        healthcheck:
            test: [ "CMD", "pg_isready", "-q", "-d", "devdb", "-U", "postgres" ]
            timeout: 45s
            interval: 10s
            retries: 10
    
    app:
        build: app
        networks:
            - rabbitmq_go_net
        depends_on:
            postgres:
                condition: service_healthy
volumes:
    db_data:

networks:
    rabbitmq_go_net:
        driver: bridge

现在我无法连接到Rabbit。我尝试使用相同的名称创建不同的网络,但每次我都会遇到相同的错误:

FATA[2022-07-31T13:24:09Z]ipstack/internal.(*app).startConsume() app.go:43 failed to connect to RabbitMQ due dial tcp 127.0.0.1:5672: connect: connection refused

连接:

addr := fmt.Sprintf("amqp://%s:%s@%s:%s/", cfg.Username, cfg.Password, cfg.Host, cfg.Port)

其中 host 是容器名称 rabbitmq。是否可以执行此操作,或者是否有必要以其他方式将程序放入容器中?我会很乐意帮忙

共有1个答案

商德泽
2023-03-14

我认为问题在于,尽管在两个不同的组合文件中使用了相同的名称,但您的Docker网络并不相同。Docker使用项目名称在组合文件中声明的网络前缀,以避免冲突。

你所寻找的一切都可以在这个SO响应和相应的线程中找到。它展示了如何在网络上使用< code>external标志,这样第二次构建就不会创建新的网络,还讨论了Docker如何使用项目名称作为网络名称的前缀,这样您就可以预测生成的网络名称可能是什么。

或者,您可以使用 docker 网络创建提前创建网络,并在两个撰写文件中使用外部标志,这样您就不必担心 docker 的命名召集。

 类似资料:
  • 我想在一个docker容器中运行Rabbitmq服务器,并使用芹菜从另一个容器连接到它(http://celeryproject.org/) 我已使用以下命令运行rabbitmq。。。 然后通过 当我试图做非常基本的教程来验证http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html 我得

  • 问题内容: 我有应用程序,使用过Tornado和tornado-redis。我开始[redis]中的[image“ app” 然后我想将我的应用程序与redis链接: 我有错误: 我已经用本地tornado和redis测试了我的代码,并且可以正常工作。问题在 为什么我的应用无法连接到Redis容器?如何解决?我使用标准端口6379。 谢谢! 问题答案: 尝试在上使用redis 。(请参见此处的源代

  • 从我的spring-boot应用程序容器连接到Rabbitmq时,我遇到了一个错误。 我在docker compose文件中附加了两个docker容器(Rabbitmq和spring-boot应用程序)和网桥网络: 当我的Spring Boot应用程序尝试连接到后者时,Rabbitmq拒绝了连接。日志下方: 当我在我的spring boot应用程序容器(在我的例子中是orchestrator)中执

  • 我正在尝试从另一个码头工人容器连接到 kafka docker 容器。但它没有连接。 为了运行kafka和zookeeper,我使用了docker compose文件: 容器docker compose 17138956372294708100 _ kafkatest . producer _ 1和docker compose 17138956372294708100 _ kafkatest .

  • 我有一个Java应用程序在Docker容器中运行,在另一个容器中运行。 如何连接容器以在Java应用程序中使用<code>rabbitmq</code>?

  • 我有一个jenkins在docker容器中运行,另一个docker在不同的docker容器中运行。 我已经映射了/var/run/docker。将本地机器的sock文件保存到docker容器中,并且我能够在docker容器中执行docker命令。docker容器和jenkins容器都位于同一网络上。但当从詹金斯连接到docker集装箱时,我的连接被拒绝了。我已将666个权限授予/var/run/d