代码之家  ›  专栏  ›  技术社区  ›  abhishek_rathaur

我无法连接到docker中的rabbitmq服务器

  •  3
  • abhishek_rathaur  · 技术社区  · 7 年前

    我正在使用docker compose运行一个连接到rabbitmq服务器的sbt进程。以下是我的docker撰写文件:-

    version: "3"
    services:
      web:
        # replace username/repo:tag with your name and image details
        image: abhishekkumargaya/messanger
        ports:
          - "1883:1883"
        links:
          - rabbit-server
          - redis
          - mysql
        networks:
          - webnet
      rabbit-server:
        image: "rabbitmq:3-management"
        hostname: localhost
        environment:
          #RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
          RABBITMQ_DEFAULT_USER : guest
          RABBITMQ_DEFAULT_PASS : guest
        ports:
          - "5672:5672"
          - "15672:15672"
    
        networks:
          - webnet
    
      redis:
        image: "redis:alpine"
    
      mysql:
        image: mysql
        container_name: database.dev
        command: mysqld --user=root --verbose
    
        ports:
          - "3306:3306"
        environment:
          MYSQL_DATABASE: "user_messages"
          MYSQL_USER: "test"
          MYSQL_PASSWORD: "root"
          MYSQL_ROOT_PASSWORD: "root"
          MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    
    networks:
      webnet:
    volumes:
      redis-data:
    

    我收到连接被拒绝错误。我在代码中使用默认值连接到rabbit服务器。

    private lazy val factory = new ConnectionFactory
    val connection = factory.newConnection()
    

    我的docker文件:-

    FROM openjdk:8
    ENV SBT_VERSION 0.13.16
    RUN \
      curl -L -o sbt-$SBT_VERSION.deb http://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
      dpkg -i sbt-$SBT_VERSION.deb && \
      rm sbt-$SBT_VERSION.deb && \
      apt-get update && \
      apt-get install sbt && \
      sbt sbtVersion
    
    WORKDIR /app
    ADD target/scala-2.11/messanger-assembly-1.0.jar /app
    EXPOSE 1883
    CMD java -jar messanger-assembly-1.0.jar
    

    我得到的错误如下:-

    Caused by: java.net.ConnectException: Connection refused (Connection refused)
    web_1            |  at java.net.PlainSocketImpl.socketConnect(Native Method)
    web_1            |  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    web_1            |  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    web_1            |  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    web_1            |  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    web_1            |  at java.net.Socket.connect(Socket.java:589)
    web_1            |  at com.rabbitmq.client.impl.SocketFrameHandlerFactory.create(SocketFrameHandlerFactory.java:60)
    web_1            |  at com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newConnection(RecoveryAwareAMQConnectionFactory.java:62)
    web_1            |  at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.init(AutorecoveringConnection.java:99)
    web_1            |  at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:948)
    web_1            |  at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:907)
    web_1            |  at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:865)
    web_1            |  at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1018)
    web_1            |  at com.abhishek.rabbitmq.RabbitMqConnectionFactory$.<init>(RabbitMqConnectionFactory.scala:15)
    web_1            |  at com.abhishek.rabbitmq.RabbitMqConnectionFactory$.<clinit>(RabbitMqConnectionFactory.scala)
    

    我无法正确理解这些变量的工作原理:-

    hostname: localhost
    environment:
      #RABBITMQ_ERLANG_COOKIE: "SWQOKODSQALRPCLNMEQG"
      - RABBITMQ_DEFAULT_USER = guest
      - RABBITMQ_DEFAULT_PASS = guest
    

    我这样保存这个变量是因为默认情况下,我的客户端使用host作为localhost,user作为guest,password作为guest来连接到rabbitmq服务器 如果我只是使用命令运行rabbitmq服务器映像-

    docker-compose up --build
    

    我可以通过本地计算机连接它。

    2 回复  |  直到 7 年前
        1
  •  0
  •   abhishek_rathaur    7 年前

    我现在可以连接了。要连接到rabbit容器,我需要将主机作为rabbit放在我的web容器中。与连接mysql和redis类似,我需要将主机分别用作mysql和redis。

        2
  •  0
  •   Arkadiusz Migała    6 年前

    如果将web的network\u模式设置为“host”,则可以依赖localhost