spring - 非默认端口上的Docker-compose,spring app + mongoDB

标签 spring mongodb docker docker-compose

我从我的应用程序连接到mongodb时遇到问题。
这是docker-compose文件:

version: "3"
services:
  olx-crawler:
    container_name: olx-crawler
    image: myimage:v1
    ports:
      - "8099:8099"
    depends_on:
      - olx-mongo
    environment:
      SPRING_DATA_MONGODB_HOST: olx-mongo

  olx-mongo:
    container_name: olx-mongo
    image: mongo
    ports:
      - "27777:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: biafra
      MONGO_INITDB_ROOT_PASSWORD: password


这是我的application.yaml:
spring:
  data:
    mongodb:
      host: localhost
      port: 27777
      username: biafra
      password: password
      authentication-database: admin

logging:
  level:
    org.springframework.data.mongodb.core.MongoTemplate: DEBUG
server:
  port: 8099

现在,我已经完成了与此类似的项目(docker-compose-> spring app + mongodb),它可以正常工作,但是它使用默认的mongo端口27017。

而且我知道您必须使用mongo容器名称而不是localhost,这是这​​样的:
SPRING_DATA_MONGODB_HOST: olx-mongo 

是因为它用olx-mongo替换了application.yml中的“localhost”,如您在应用程序日志中所看到的:
Exception in monitor thread while connecting to server olx-mongo:27777

以下是一些日志:
olx-mongo      | 2020-04-15T18:00:15.170+0000 I  SHARDING [LogicalSessionCacheRefresh] Marking collection config.system.sessions as collection version: <unsharded>
olx-mongo      | 2020-04-15T18:00:15.174+0000 I  SHARDING [LogicalSessionCacheReap] Marking collection config.transactions as collection version: <unsharded>
olx-mongo      | 2020-04-15T18:00:15.175+0000 I  NETWORK  [listener] Listening on /tmp/mongodb-27017.sock
olx-mongo      | 2020-04-15T18:00:15.175+0000 I  NETWORK  [listener] Listening on 0.0.0.0
olx-mongo      | 2020-04-15T18:00:15.175+0000 I  NETWORK  [listener] waiting for connections on port 27017
olx-crawler    | 2020-04-15 18:00:15.436  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data MongoDB repositories in DEFAULT mode.
olx-crawler    | 2020-04-15 18:00:15.486  INFO 1 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 45ms. Found 1 MongoDB repository interfaces.
olx-mongo      | 2020-04-15T18:00:16.000+0000 I  SHARDING [ftdc] Marking collection local.oplog.rs as collection version: <unsharded>
olx-crawler    | 2020-04-15 18:00:16.037  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8099 (http)
olx-crawler    | 2020-04-15 18:00:16.050  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
olx-crawler    | 2020-04-15 18:00:16.052  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.33]
olx-crawler    | 2020-04-15 18:00:16.116  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
olx-crawler    | 2020-04-15 18:00:16.117  INFO 1 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1487 ms
olx-crawler    | 2020-04-15 18:00:16.468  INFO 1 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[olx-mongo:27777], mode=MULTIPLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize
=500}
olx-crawler    | 2020-04-15 18:00:16.469  INFO 1 --- [           main] org.mongodb.driver.cluster               : Adding discovered server olx-mongo:27777 to client view of cluster
olx-crawler    | 2020-04-15 18:00:16.550  INFO 1 --- [olx-mongo:27777] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server olx-mongo:27777
olx-crawler    |
olx-crawler    | com.mongodb.MongoSocketOpenException: Exception opening socket
olx-crawler    |        at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:128) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        at java.base/java.lang.Thread.run(Thread.java:844) [na:na]
olx-crawler    | Caused by: java.net.ConnectException: Connection refused (Connection refused)
olx-crawler    |        at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
olx-crawler    |        at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400) ~[na:na]
olx-crawler    |        at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243) ~[na:na]
olx-crawler    |        at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225) ~[na:na]
olx-crawler    |        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402) ~[na:na]
olx-crawler    |        at java.base/java.net.Socket.connect(Socket.java:591) ~[na:na]
olx-crawler    |        at com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ~[mongodb-driver-core-3.11.2.jar!/:na]
olx-crawler    |        ... 3 common frames omitted
olx-crawler    |
olx-crawler    | 2020-04-15 18:00:17.096  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
olx-crawler    | 2020-04-15 18:00:17.229  INFO 1 --- [           main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
olx-crawler    | 2020-04-15 18:00:17.306  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8099 (http) with context path ''
olx-crawler    | 2020-04-15 18:00:17.315  INFO 1 --- [           main] c.e.olxcrawler.OlxCrawlerApplication     : Started OlxCrawlerApplication in 3.944 seconds (JVM running for 4.977)


有什么帮助吗?

最佳答案

好吧,你写了

And i know you have to use mongo container name instead of localhost, but it still does not work.



但是你有
spring:
  data:
    mongodb:
      host: localhost
      port: 27777

问题是,使用此配置,您将无法从Spring Boot容器内连接到mongo。它只是容器“外部世界”的配置。例如,您可以从不在docker内部运行的本地运行的spring boot应用程序连接到它。
要从dockerized spring boot应用程序内连接到mongo,请将host更改为olx-mongo,并将port更改为27017

关于spring - 非默认端口上的Docker-compose,spring app + mongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61235633/

相关文章:

java - 如何访问 Thymeleaf 模板中的系统属性?

java - 兔子预取

php - 与 NoSQL 数据库相关

javascript - Elasticsearch返回的结果大于范围内指定的结果

mysql - Dockerfile和后台运行mysql服务器

docker - 环境变量OpenShift .NET Core

java - 在spring boot中应该在哪里定义实体模型类

java - Hibernate 实体上的 SpEL

mysql - MySQL频繁删除和插入记录的解决方法

mysql - 如何正确使用 Docker 镜像?