首页 > 解决方案 > 为什么spring应用程序在使用docker compose运行时无法连接到couchbase

问题描述

我正在尝试使用 docker-compose 文件运行我的 Spring Boot 应用程序,但在 docker 容器内运行的服务无法连接到数据库容器。

下面是来自 docker-compose 日志的异常堆栈跟踪

couchbase-demo   | Starting Couchbase Server -- Web UI available at http://<ip>:8091
couchbase-demo   | and logs available in /opt/couchbase/var/lib/couchbase/logs
couchbase-demo   |  
tech-blog        | LOGBACK: No context given for c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@589446616
tech-blog        | 
tech-blog        |   .   ____          _            __ _ _
tech-blog        |  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
tech-blog        | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
tech-blog        |  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
tech-blog        |   '  |____| .__|_| |_|_| |_\__, | / / / /
tech-blog        |  =========|_|==============|___/=/_/_/_/
tech-blog        |  :: Spring Boot ::        (v2.2.4.RELEASE)
tech-blog        | 
tech-blog        | 01:33:40.468 [main] INFO  com.tech.blog.TechBlogApplication - Starting TechBlogApplication v0.0.2-SNAPSHOT on bf6509f5200d with PID 1 (/opt/tech/techblog.jar started by root in /opt/tech)
tech-blog        | 01:33:40.477 [main] DEBUG com.tech.blog.TechBlogApplication - Running with Spring Boot v2.2.4.RELEASE, Spring v5.2.3.RELEASE
tech-blog        | 01:33:40.477 [main] INFO  com.tech.blog.TechBlogApplication - No active profile set, falling back to default profiles: default
^CGracefully stopping... (press Ctrl+C again to force)
Stopping tech-blog        ... done
Stopping couchbase-demo   ... done
srinathkavuri@Srinaths-MBP TechBlog % docker logs couchbase-demo
Starting Couchbase Server -- Web UI available at http://<ip>:8091
and logs available in /opt/couchbase/var/lib/couchbase/logs
 
Waiting for Couchbase Server to start....%                                                                                                                                  srinathkavuri@Srinaths-MBP TechBlog % docker-compose up         
Starting couchbase-demo ... done
Starting tech-blog      ... done
Attaching to couchbase-demo, tech-blog
couchbase-demo   | Starting Couchbase Server -- Web UI available at http://<ip>:8091
couchbase-demo   | and logs available in /opt/couchbase/var/lib/couchbase/logs
tech-blog        | LOGBACK: No context given for c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1908923184
tech-blog        | 
tech-blog        |   .   ____          _            __ _ _
tech-blog        |  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
tech-blog        | ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
tech-blog        |  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
tech-blog        |   '  |____| .__|_| |_|_| |_\__, | / / / /
tech-blog        |  =========|_|==============|___/=/_/_/_/
tech-blog        |  :: Spring Boot ::        (v2.2.4.RELEASE)
tech-blog        | 
couchbase-demo   |  
tech-blog        | 02:07:25.243 [main] INFO  com.tech.blog.TechBlogApplication - Starting TechBlogApplication v0.0.2-SNAPSHOT on bf6509f5200d with PID 1 (/opt/tech/techblog.jar started by root in /opt/tech)
tech-blog        | 02:07:25.250 [main] DEBUG com.tech.blog.TechBlogApplication - Running with Spring Boot v2.2.4.RELEASE, Spring v5.2.3.RELEASE
tech-blog        | 02:07:25.251 [main] INFO  com.tech.blog.TechBlogApplication - No active profile set, falling back to default profiles: default
tech-blog        | 02:07:28.543 [main] INFO  o.a.catalina.core.StandardService - Starting service [Tomcat]
tech-blog        | 02:07:28.544 [main] INFO  o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.30]
tech-blog        | 02:07:28.683 [main] INFO  o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
tech-blog        | 02:07:29.984 [cb-events] INFO  com.couchbase.core - [com.couchbase.core][DnsSrvLookupFailedEvent][30ms] DNS SRV lookup failed (name not found), trying to bootstrap from given hostname directly.
tech-blog        | 02:07:30.795 [cb-events] INFO  com.couchbase.core - [com.couchbase.core][CoreCreatedEvent] {"clientVersion":"3.0.3","clientGitHash":"e55f7d43","coreVersion":"2.0.4","coreGitHash":"e55f7d43","userAgent":"couchbase-java/3.0.3 (Linux 4.19.76-linuxkit amd64; OpenJDK 64-Bit Server VM 1.8.0_121-b13)","maxNumRequestsInRetry":32768,"ioEnvironment":{"nativeIoEnabled":true,"eventLoopThreadCount":2,"eventLoopGroups":["EpollEventLoopGroup"]},"ioConfig":{"captureTraffic":[],"mutationTokensEnabled":true,"networkResolution":"auto","dnsSrvEnabled":true,"tcpKeepAlivesEnabled":true,"tcpKeepAliveTimeMs":60000,"configPollIntervalMs":2500,"kvCircuitBreakerConfig":"disabled","queryCircuitBreakerConfig":"disabled","viewCircuitBreakerConfig":"disabled","searchCircuitBreakerConfig":"disabled","analyticsCircuitBreakerConfig":"disabled","managerCircuitBreakerConfig":"disabled","numKvConnections":1,"maxHttpConnections":12,"idleHttpConnectionTimeoutMs":30000,"configIdleRedialTimeoutMs":300000},"compressionConfig":{"enabled":true,"minRatio":0.83,"minSize":32},"securityConfig":{"tlsEnabled":false,"nativeTlsEnabled":true,"hasTrustCertificates":false,"trustManagerFactory":null},"timeoutConfig":{"kvMs":10000000,"kvDurableMs":10000,"managementMs":75000,"queryMs":75000,"viewMs":75000,"searchMs":75000,"analyticsMs":75000,"connectMs":10000000,"disconnectMs":10000},"loggerConfig":{"customLogger":null,"fallbackToConsole":false,"disableSlf4j":false,"loggerName":"CouchbaseLogger","diagnosticContextEnabled":false},"orphanReporterConfig":{"emitIntervalMs":10000,"sampleSize":10,"queueLength":1024},"retryStrategy":"BestEffortRetryStrategy","requestTracer":"OwnedSupplier"} {"coreId":"0xce88bae700000001"}
tech-blog        | 02:07:30.806 [cb-events] INFO  com.couchbase.node - [com.couchbase.node][NodeConnectedEvent] Node connected {"coreId":"0xce88bae700000001","managerPort":"8091","remote":"localhost"}
tech-blog        | 02:07:30.829 [cb-events] WARN  com.couchbase.endpoint - [com.couchbase.endpoint][EndpointConnectionFailedEvent][271ms] Connect attempt 1 failed because of AnnotatedConnectException: finishConnect(..) failed: Connection refused: localhost/127.0.0.1:11210 {"circuitBreaker":"DISABLED","coreId":"0xce88bae700000001","remote":"localhost:11210","type":"KV"}
tech-blog        | com.couchbase.client.core.deps.io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Connection refused: localhost/127.0.0.1:11210
tech-blog        | Caused by: java.net.ConnectException: finishConnect(..) failed: Connection refused
tech-blog        |      at com.couchbase.client.core.deps.io.netty.channel.unix.Errors.throwConnectException(Errors.java:124)
tech-blog        |      at com.couchbase.client.core.deps.io.netty.channel.unix.Socket.finishConnect(Socket.java:243)
tech-blog        |      at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.doFinishConnect(AbstractEpollChannel.java:672)
tech-blog        |      at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.finishConnect(AbstractEpollChannel.java:649)
tech-blog        |      at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.epollOutReady(AbstractEpollChannel.java:529)
tech-blog        |      at com.couchbase.client.core.deps.io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:465)
tech-blog        |      at com.couchbase.client.core.deps.io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378)
tech-blog        |      at com.couchbase.client.core.deps.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
tech-blog        |      at com.couchbase.client.core.deps.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
tech-blog        |      at com.couchbase.client.core.deps.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
tech-blog        |      at java.lang.Thread.run(Thread.java:745)

下面是我的 docker-compose 文件。

services:
  couchbase.lcl:
    image: bentonam/couchbase-docker:latest
    container_name: couchbase-demo
    ports:
      - "8091-8094:8091-8094"
      - "11210:11210"
    environment:
      CLUSTER_USERNAME: Administrator
      CLUSTER_PASSWORD: pass
      CLUSTER_NAME: TECH_BLOG_CLUSTER
      SERVICES: data,index,query,fts
      CLUSTER_RAMSIZE: 500
      BUCKET: user-profile
      BUCKET_RAMSIZE: 300
      NODE_INIT_INDEX_PATH: /opt/couchbase/var/lib/couchbase/indexes
    networks:
      - tech-blog-network

  techblog.lcl:
    image: docker-tech-blog:latest
    restart: always
    container_name: tech-blog
    links:
      - couchbase.lcl
    environment:
      COUCHBASE_HOST: couchbase.lcl
    depends_on:
      - couchbase.lcl
    ports:
      - "8123:8123"
    networks:
      - tech-blog-network

networks:
  tech-blog-network:
    driver: bridge

谁能告诉我我的 docker-compose 文件有什么问题吗?

下面是我的spring配置文件

server:
  port: 8123
logging:
  level:
    org.springframework: ERROR
    com.tech.blog: DEBUG
  pattern:
    console: "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"
    file: "%d %p %c{1.} [%t] %m%n"
  file: /var/log/techblog.log
management:
  endpoint:
    health:
      show-details: always
  endpoints:
    web:
      exposure:
        include: "*"
  health:
    defaults:
      enabled: false
cb:
  connectionTimeOut: 10000
  kvTimeOut: 10000
  hosts: localhost
  cluster:
    username: Administrator
    password: pass
    bucketname: user-profile

标签: javaspring-bootdockerdocker-composecouchbase

解决方案


localhost当您为每个服务使用 docker 容器时,它不是。

改变:hosts: localhost

至: hosts: couchbase.lcl


推荐阅读