在我的项目中,我尝试连接到mysql
和mongodb
。我想我可以连接到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环境的新手。我已经按照教程和代码在互联网上提供。
1条答案
按热度按时间f5emj3cl1#
应用程序容器
myproject
和MySQL数据库mysqldb
都声明了networks: [netshop]
,但MongoDB数据库mongocontainer
没有。由于这两个容器不在同一个网络上,因此它们无法相互通信。最简单的解决方案是删除整个文件中的 * 所有 *
networks:
块。Compose为您提供了一个名为default
的网络,并将容器连接到该网络;对于大多数项目,您根本不需要任何手动网络设置。我还删除了过时的
links:
选项,这在Docker网络中是不必要的。相反,将mongocontainer
添加到depends_on:
列表中会有帮助,尽管这不能保证在应用程序想要连接到它们之前,两个数据库都完全启动。