Java 为什么docker compose启动rabbit时出现连接拒绝错误?

Java 为什么docker compose启动rabbit时出现连接拒绝错误?,java,spring-boot,docker,rabbitmq,ldap,Java,Spring Boot,Docker,Rabbitmq,Ldap,我在docker compose中运行sprinboot应用程序、前端(在react中)、数据库和rabbitmq。当我运行它时,除了rabbitmq之外,其他一切都正常工作。我有一个错误——“连接被拒绝” docker compose: version: '3' services: server: build: ./mlogger ports: - "8000:8080" depends_on: - da

我在docker compose中运行sprinboot应用程序、前端(在react中)、数据库和rabbitmq。当我运行它时,除了rabbitmq之外,其他一切都正常工作。我有一个错误——“连接被拒绝”

docker compose:

version:  '3'
services:
    server:
      build: ./mlogger
      ports:
      - "8000:8080"
      depends_on:
      - database
      restart: always
    web:
      build: ./web
      ports:
      - "4000:3000"
      tty: true
      depends_on:
      - server
    database:
      container_name: 'mysql'
      image: mysql
      environment:
        MYSQL_ROOT_PASSWORD: jitsi1234
        MYSQL_USER: jitsiteam
        MYSQL_DATABASE: testmlogger
      ports:
      - "3306:3306"
      restart: always
    rabbitmq:
      image: rabbitmq:3-management
      container_name: rabbitmq
      command: sh -c "rabbitmq-plugins enable rabbitmq_auth_backend_ldap"
      ports:
      - "5672:5672"
      - "15672:15672"
      restart: always
错误:

server_1    | 2020-09-05 16:14:42.110  INFO 6 --- [ntContainer#0-1] o.s.a.r.c.CachingConnectionFactory       : Attempting to connect to: [localhost:5672]
server_1    | 2020-09-05 16:14:42.117 ERROR 6 --- [ntContainer#0-1] o.s.a.r.l.SimpleMessageListenerContainer : Failed to check/redeclare auto-delete queue(s).
server_1    | 
server_1    | org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)
server_1    |   at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:61) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:524) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:751) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.createConnection(ConnectionFactoryUtils.java:214) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:2089) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2062) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:2042) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueInfo(RabbitAdmin.java:407) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:391) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.attemptDeclarations(AbstractMessageListenerContainer.java:1836) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.redeclareElementsIfNecessary(AbstractMessageListenerContainer.java:1817) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.initialize(SimpleMessageListenerContainer.java:1349) [spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1195) [spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at java.lang.Thread.run(Thread.java:748) [na:1.8.0_265]
server_1    | Caused by: java.net.ConnectException: Connection refused (Connection refused)
server_1    |   at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_265]
server_1    |   at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_265]
server_1    |   at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_265]
server_1    |   at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_265]
server_1    |   at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_265]
server_1    |   at java.net.Socket.connect(Socket.java:607) ~[na:1.8.0_265]
server_1    |   at com.rabbitmq.client.impl.SocketFrameHandlerFactory.create(SocketFrameHandlerFactory.java:60) ~[amqp-client-5.9.0.jar!/:5.9.0]
server_1    |   at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1137) ~[amqp-client-5.9.0.jar!/:5.9.0]
server_1    |   at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:1087) ~[amqp-client-5.9.0.jar!/:5.9.0]
server_1    |   at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connectAddresses(AbstractConnectionFactory.java:560) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.connect(AbstractConnectionFactory.java:533) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:487) ~[spring-rabbit-2.2.7.RELEASE.jar!/:2.2.7.RELEASE]
server_1    |   ... 12 common frames omitted
Spring启动属性:

spring.rabbitmq.address=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
我也在使用ldap,我想在开始时将用户添加到rabbitmq。我可以通过在docker compose中添加命令来完成它

Spring启动ldap配置:

@Configuration
@EnableLdapRepositories
public class LdapConfig {

    @Bean
    public LdapContextSource contextSource() {
        LdapContextSource contextSource = new LdapContextSource();
        contextSource.setUrl("ldap://localhost:18889");
        contextSource.setBase("dc=example,dc=com");
        return contextSource;
    }

    @Bean
    public LdapTemplate ldapTemplate() {
        return new LdapTemplate(contextSource());
    }
}

在容器中,
localhost
是容器本身,而不是它运行的主机。组件通过其服务名称彼此可见。除了连接到localhost:5672,连接到rabbitmq:5672,它应该可以工作。对数据库也要这样做。

我发现,在负责spring应用程序的docker compose部分中,我必须指定网络模式:

server:
 build: ./mlogger
 ports:
  - "8000:8080"
 depends_on:
  - database
  - rabbitmq
 network_mode: "host"

我以前对数据库做过,我忘记了兔子,但仍然是相同的错误相同的错误意思是它仍然抱怨无法连接到本地主机吗?不,兔子打开了,我可以使用来宾登录,但是当spring boot应用程序尝试连接时,会显示此错误(服务器1是spring boot应用程序)这就是我要问的:错误是说localhost吗?就在错误转储之前,它说它正在连接localhost确实,我的应用程序尝试通过localhost连接,即使我将地址更改为rapid,如何更改它?您提供给
rabbitmq
容器的
命令将运行,而不是正常的命令:您正在添加插件,然后立即退出,而不是运行消息代理。您可能需要一个自定义的派生映像来添加插件;请参阅上的“启用插件”。