我有一个spring framework web应用程序,我正在尝试使用tomcat和docker image将其部署到生产环境中。
我搜索了这个错误,发现有两个可能的错误。第一个是不正确的数据库网址格式,我检查了我的,它是正确的。数据库网址是这样的
jdbc:postgresql://localhost:5432/postgres?currentSchema=volga&stringtype=unspecified
字符串
第二个可能的问题是Postgres db库文件不包含在war文件中。所以我在运行的tomcat容器中运行bash命令,检查Postgres库文件,它存在于war文件中。我还试图将Postgres库复制到tomcat lib文件夹中,但它不起作用。
我用最少的代码创建了一个repo来重现错误。https://github.com/ap30422/spring-boot.git
请克隆存储库并将目录更改为compete
目录。运行mvn clean install package
构建应用程序。然后运行Docker build .
构建镜像。使用docker run #insert_image_id. -p 8080:8080
运行Docker镜像
如果检查http://localhost:8080,您将在docker容器日志中看到Down
文本和错误日志。
2条答案
按热度按时间koaltpgm1#
问题是,您正在非常努力地围绕Sping Boot 提供的所有东西工作。
1.你不使用自动配置的
DataSource
,而是尝试自己做一些事情。1.您没有使用嵌入式Tomcat,而是尝试部署应用程序。
使用你所拥有的框架和工具来获得优势,而不是围绕事情工作。
使用Sping Boot
DataSource
在您的
application.properties
(应该在src/main/resources
中)中添加以下内容字符串
接下来,修改您的
HelloController
以使用DataSource
或更好的JdbcTemplate
。型
现在您正确地使用了Sping Boot 配置的
DataSource
,Sping Boot 将加载正确的驱动程序(如果它在类路径上)。应用程序可能无法启动,因为我怀疑在您为此应用程序构建的容器中是否有可用的PostgreSQL数据库。
使用嵌入式tomcat
Sping Boot 已经提供了Tomcat作为默认提供程序,并且应该用于运行它。将您的applicable更改为
jar
而不是war
。并修改您的Dockerfile
以启动应用程序而不是使用Tomcat并部署应用程序。型
这将启动您创建的应用程序并使用嵌入式tomcat示例。
**注意:**这不是Sping Boot 应用程序的最佳Dockerfile,您希望使用更多层,以便能够重用。请参阅Spring Boot Docker Guide。
u0njafvf2#
您遇到的当前问题可能归因于缺少JDBC驱动程序或Sping Boot 应用程序或Tomcat Docker映像中的错误配置。您可以遵循以下几个步骤来解决并可能解决问题:
1.验证部门管理。
确认PostgreSQL JDBC驱动程序作为依赖项包含在pom.xml文件中。
字符串
2.检查Sping Boot 中的类路径。
虽然Sping Boot 应该自动将JDBC驱动程序加载到类路径中,但您可以在application.properties或application.yml文件中显式指定驱动程序类
型
3.验证数据库连接URL
确保数据库连接URL正确。如果数据库位于不同的服务器上,请使用适当的主机名或IP地址。此外,请确认Tomcat可以解析“localhost”(如果该URL是“localhost”的一部分)。
4. Docker镜像构建
在创建Docker镜像时,请确保将PostgreSQL JDBC驱动程序复制到镜像中的正确位置。例如,您可以将其复制到“lib”文件夹。修改您的Dockerfile如下:
型
通过遵循这些步骤,您应该能够解决与Sping Boot 应用程序和Tomcat Docker映像中的JDBC驱动程序和配置相关的潜在问题。