gpt4 book ai didi

使用 Flyway 运行测试并在 Docker 容器内嵌入 Postgresql 时出现 java.net.ConnectException

转载 作者:行者123 更新时间:2023-12-02 03:23:13 28 4
gpt4 key购买 nike

为了正确测试我的 Spring Boot 应用程序,我正在使用 embedded Postgresql在集成测试中。此外,我也使用 Flyway,它配置为使用基于 Postgresql 配置的数据源(查看 EmbeddedPostgresConfigurationFlywayConfiguration 类)。

在我的环境 (OS X) 上运行时,我的所有测试都顺利通过,但在 Docker 容器内运行时失败(对于 java:8openjdk:8 镜像)。我不知道造成这种差异的原因是什么,以及如何修复它以使测试在 Docker 内部通过(进一步的持续集成管道需要它)。

以下是复制该问题的最小代码示例:https://github.com/nkoder/postgresql-embedded-example .

要毫无问题地运行测试,请运行 ./gradlew clean test 。要运行失败的测试,请运行 docker build . .

在 Docker 内运行测试时抛出错误:

java.lang.IllegalStateException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: org.springframework.beans.BeanInstantiationException
Caused by: org.flywaydb.core.api.FlywayException
Caused by: org.postgresql.util.PSQLException
Caused by: java.net.ConnectException

我试图自己解决这个问题,但我仍然只有一些猜测,没有任何可靠的东西。唯一的“提示”:对于嵌入式 Postgresql 配置中使用的硬编码(非随机)端口,有时在 flyway.clean(); 行中会出现类似的异常。在FlywayConfiguration类(当在具有更多测试的实际项目中从 IntelliJ IDEA 运行测试时),这似乎是通过提供的数据源访问数据库的第一行代码。

更新 1: Postgresql 实例是在同一 Docker 容器内部随机开放端口上的本地主机测试期间创建的。我怀疑不需要连接到主机(容器外部)。

最佳答案

问题解决了!

根据https://github.com/yandex-qatools/postgresql-embedded我们不能在测试中使用 root 来运行嵌入式 Postgresql。因此,我需要解决这个问题是以非 root 用户身份在 Docker 中运行测试。

您可以在此处查看修复:https://github.com/nkoder/postgresql-embedded-example/commit/391977052b1563cdcabf66a2fe3ca0a3e0a7b358

关于使用 Flyway 运行测试并在 Docker 容器内嵌入 Postgresql 时出现 java.net.ConnectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39337495/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com