如何在TestContainers中创建数据库?

时间:2018-01-17 17:22:12

标签: testcontainers

我正在使用这种依赖:

<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>postgresql</artifactId>
    <version>1.5.1</version>
    <scope>test</scope>
</dependency>

这是容器,用我的测试推出:

@ClassRule
public static PostgreSQLContainer postgres = new PostgreSQLContainer()
    .withDatabaseName("user")
    .withUsername("postgres")
    .withPassword("postgres");

但是当我试图建立与数据库user的连接时,我收到异常:

PSQLException: FATAL: database "user" does not exist

在此容器中仅显示默认数据库"postgres"

如何创建数据库"user"

2 个答案:

答案 0 :(得分:0)

我在TestContainers项目中尝试了this test,其中DB_NAME设置为“user”,USER / PWD设置为“postgres”,结果成功。 确保正确配置连接,或考虑JDBC-style containers

答案 1 :(得分:0)

问题是因为容器返回带有随机端口的JDBC_URL,并且默认端口是可访问的默认Postgres DB,但是neede one是随机端口

这是解决方法:

@ClassRule
public static DockerComposeContainer environment =
    new DockerComposeContainer(new File("src/test/resources/docker-compose-postgres.yml"))
        .withExposedService("postgres-it", 5432);

这是docker-compose yml:

version: "2"
    services:
    postgres-it:
        image: postgres
        ports:
            - 5432:5432
        hostname: postgres-it
        environment:
            POSTGRES_USER: postgres
            POSTGRES_PASSWORD: postgres
            POSTGRES_DB: user