docker compose configuration无法连接到mongodb容器

nhaq1z21  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(107)

在我的项目中,我尝试连接到mysqlmongodb。我想我可以连接到mysql容器。但是我在尝试连接到mongodb容器时出错。
application.properties文件

# SERVER
server.port = 5555
spring.datasource.url=jdbc:mysql://mysqldb:3306/shopdb
spring.datasource.username=root
spring.datasource.password=root

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
#spring.jpa.hibernate.ddl-auto=update
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

application.security.jwt.secret-key=404E635266556A586E3272357538782F413F4428472B4B6250645367566B5970
application.security.jwt.expiration=7200000
application.security.jwt.refresh-token.expiration=604800000

spring.data.mongodb.host=mongocontainer
spring.data.mongodb.port=27017
spring.data.mongodb.database=ShopDb

Dockerfile:

FROM openjdk:17-alpine
WORKDIR /app
COPY target/myproject-0.0.1-SNAPSHOT.jar /app/myproject.jar
EXPOSE 5555
CMD ["java","-jar","myproject.jar"]

docker-compose.yml

version: "5"
services:
  mysqldb:
   image: mysql:latest
   ports:
    - "3307:3306"
   networks:
    - netshop
   environment:
    MYSQL_DATABASE: shopdb
    MYSQL_USER: root
    MYSQL_PASSWORD: root
   volumes:
    - type: bind
      source: /C/Users/tim/Documents/mysqldata
      target: /var/lib/mysql
  mongocontainer:
   image: mongo:latest
   container_name: mongocontainer
   restart: always
   ports:
    - 27017:27017  
  myproject:
   image:
    timqwert09/myproject:latest
   ports:
    - "5555:5555"
   networks:
    - netshop
   depends_on:
    - mysqldb
   links:
    - mongocontainer
networks:
 netshop:
  driver: bridge

我首先要塑造我的形象。它成功地建立了。然后在resources目录下运行docker-compose up
我运行顺利,但最终它给出了以下错误:

resources-myproject-1  | com.mongodb.MongoSocketException: mongocontainer: Try again
resources-myproject-1  |    at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:217) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:78) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:68) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:183) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:198) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:158) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]
resources-myproject-1  | Caused by: java.net.UnknownHostException: mongocontainer: Try again
resources-myproject-1  |    at java.base/java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ~[na:na]
resources-myproject-1  |    at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:932) ~[na:na]
resources-myproject-1  |    at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1517) ~[na:na]
resources-myproject-1  |    at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:851) ~[na:na]
resources-myproject-1  |    at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1507) ~[na:na]
resources-myproject-1  |    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1366) ~[na:na]
resources-myproject-1  |    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1300) ~[na:na]
resources-myproject-1  |    at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:209) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    ... 6 common frames omitted
resources-myproject-1  |
resources-myproject-1  | 2023-10-01T07:05:22.194Z  INFO 1 --- [container:27017] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server mongocontainer:27017
resources-myproject-1  |
resources-myproject-1  | com.mongodb.MongoSocketException: mongocontainer
resources-myproject-1  |    at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:217) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:78) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:68) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:183) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:198) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:158) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]
resources-myproject-1  | Caused by: java.net.UnknownHostException: mongocontainer
resources-myproject-1  |    at java.base/java.net.InetAddress$CachedAddresses.get(InetAddress.java:800) ~[na:na]
resources-myproject-1  |    at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:886) ~[na:na]
resources-myproject-1  |    at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1507) ~[na:na]
resources-myproject-1  |    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1366) ~[na:na]
resources-myproject-1  |    at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1300) ~[na:na]
resources-myproject-1  |    at com.mongodb.ServerAddress.getSocketAddresses(ServerAddress.java:209) ~[mongodb-driver-core-4.8.2.jar!/:na]
resources-myproject-1  |    ... 6 common frames omitted
resources-myproject-1  |

我还想告诉你,在主机即windows这里,我已经安装了mongodb,但它没有运行。有什么区别吗...?如何将我的应用程序连接到mongodb容器?我是Docker环境的新手。我已经按照教程和代码在互联网上提供。

f5emj3cl

f5emj3cl1#

应用程序容器myproject和MySQL数据库mysqldb都声明了networks: [netshop],但MongoDB数据库mongocontainer没有。由于这两个容器不在同一个网络上,因此它们无法相互通信。
最简单的解决方案是删除整个文件中的 * 所有 * networks:块。Compose为您提供了一个名为default的网络,并将容器连接到该网络;对于大多数项目,您根本不需要任何手动网络设置。
我还删除了过时的links:选项,这在Docker网络中是不必要的。相反,将mongocontainer添加到depends_on:列表中会有帮助,尽管这不能保证在应用程序想要连接到它们之前,两个数据库都完全启动。

相关问题