将编译后的Spring-Boot应用程序连接到我在服务器上另一个容器上运行的数据库时遇到问题。
我尝试了不同的配置,从本地主机更改为服务器的IP地址以进行连接。我还仔细检查了通过Adminer登录的凭据是否匹配。最后,我多次重建了compose和image文件,以确保我拥有所有最新版本。
撰写文件:
version: '3.1'
services:
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: mypassword
MYSQL_DATABASE: marketingappdb
ports:
- "3306:3306"
expose:
- 3306
volumes:
- ./mariadbvolume:/var/lib/mariadb
networks:
- marketingapp
adminer:
image: adminer
restart: always
ports:
- "8086:8080"
expose:
- 8086
depends_on:
- db
networks:
- marketingapp
springserver:
image: marketingapp
restart: always
ports:
- "8091:8091"
expose:
- 8091
depends_on:
- db
networks:
- marketingapp
networks:
marketingapp:
Spring服务器映像:
FROM openjdk:latest
COPY /marketing-app-final.jar .
EXPOSE 8091
ENTRYPOINT ["java", "-jar", "marketing-app-final.jar"]
Spring的应用程序属性:
server.port = 8091
spring.datasource.url=jdbc:mariadb://0.0.0.0:3306/marketingappdb
spring.datasource.username=root
spring.datasource.password=mypassword
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
我可以使用该应用程序通过远程相同的配置(显然是用IP替换localhost)从我的PC连接到数据库,并且看不到为什么我不能在实际服务器上执行相同的操作。预先感谢您的帮助!
答案 0 :(得分:2)
使用docker dns将您的spring应用程序连接到mariabd:
jdbc:mariadb://db:3306/marketingappdb
其他一些提示:您不需要公开端口3306,您已经将其绑定到主机上的3306(如果您只是想在docker服务中使用它,则无需绑定/公开它)完全没有)。而且mariabd永久存储是var / lib / mysql,而不是var / lib / mariadb