当前位置: 首页 > 知识库问答 >
问题:

docker容器中不存在postgres数据库

韩喜
2023-03-14

我的docker撰写。yml是:

version: "3.9"

services:
  db:
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: 123
      POSTGRES_DB: "haircut_studio"
      POSTGRES_USER: "postgres"
    volumes:
      - ./log-directory:/var/lib/postgresql
  app:
    build: ../
    restart: always
    ports:
      - "8080:8080"
    environment:
      - DATASOURCE_HOST=db
      - DATASOURCE_PORT=5432
    depends_on:
      - db

Dockerfile是:

FROM openjdk:17-alpine
COPY / /spd
WORKDIR /spd
RUN chmod +x gradlew
RUN ./gradlew :bootJar
WORKDIR /spd/build/libs
EXPOSE 8080
CMD ["java","-jar", "haircutStudio-0.0.1-SNAPSHOT.jar"]

application.properties

spring.jpa.show-sql=true
#logging.level.root=debug

server.port=8080
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

datasource.username=postgres
datasource.password=123
datasource.host=localhost
datasource.port=5432
datasource.url=jdbc:postgresql://${datasource.host}:${datasource.port}/haircut_studio
spring.datasource.driver-class-name=org.postgresql.Driver

spring.flyway.baselineOnMigrate = true
logging.level.org.springframework.boot.autoconfigure=ERROR

TestDbConfig.java

package com.spdu.haircutstudio.configuration;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.flywaydb.core.Flyway;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DbConfig {

    @Bean(destroyMethod = "close")
    public DataSource getDataSource(
            @Value("${datasource.password}") String password,
            @Value("${datasource.username}") String username,
            @Value("${datasource.url}") String jdbcUrl
    ) {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl(jdbcUrl);
        config.setUsername(username);
        config.setPassword(password);

        return new HikariDataSource(config);
    }

    @Bean
    public Flyway flyway(DataSource dataSource) {
        final Flyway flyway = Flyway.configure()
                .dataSource(dataSource)
                .locations("classpath:db")
                .outOfOrder(true)
                .load();
        flyway.migrate();
        return null;
    }
}

当我构建我的应用程序映像时,一切正常,然后我应该启动我的数据库映像和应用程序映像。我用docker-compose up db启动db,我得到了:org.postgresql.util.PSQLException: FATAL:数据库“haircut_studio”不存在。我的DbConfig有问题吗?如果我在本地启动我的应用程序,而不是在Docker容器中启动我的应用程序,我的应用程序成功连接到数据库,我可以做我想做的一切。我如何修复此错误?

这是GitLab回购:https://gitlab.com/staaankey/java/-/tree/reservation-feature

共有1个答案

夏侯昊明
2023-03-14

默认数据目录是/var/lib/postgresql/data。您需要调整音量:

volumes:
  - ./log-directory:/var/lib/postgresql/data

你可以在这里读到更多

 类似资料:
  • 然后 但是当我执行命令时,我出现了这个错误知道我的数据库已有表。我做错了吗?

  • 我正在启动一个简单的postgresql容器,如下所示: 由于我没有指定用户名,因此将使用默认的“postgresq”,但当我尝试使用intelliJ创建数据源或连接到spring boot项目时,我总是会遇到相同的错误: 致命:角色"postgres"不存在 谢谢你的帮助。

  • 我想在启动Postgres Docker映像后创建一个数据库。

  • 在将Django docker容器连接到Postgres数据库时,我收到以下错误。 下面是运行容器的Dockerfile pg_hba.conf->宿主all all 0.0.0.0/0 md5 我已经读到上面的以下细节打开数据库上的连接。

  • 我正在使用postgres与docker和它有麻烦。我成功地docker-compose-build 当我在命令下面运行时,它工作得很好。psql按预期以my_username用户开始。我可以看到我的数据库,\l,\dt命令工作正常。 docker-compose exec db psql--username=my_username--dbname=my_database 苏波斯特格雷斯 crea

  • 我有一个Docker容器,其中包含我的Postgres数据库。它使用官方的Postgres映像,其中有一个CMD条目,可以在主线程上启动服务器。 我想通过运行