簡體   English   中英

來自 spring 應用程序的數據未保存在 dockerized Postgres 數據庫中

[英]Data from spring application is not being persisted in the dockerized Postgres database

我真的很感激任何幫助。 我整天都在尋找解決問題的方法,但找不到任何有效的方法。 我有幾個 docker 容器:一個 spring 應用程序、一個 postgres 數據庫、keycloak 和一個 postgres 數據庫備份。 當我使用 Postman 或 curl 通過我的端點創建新實體時,我還可以通過另一個端點檢索它。 但是,數據庫中沒有保存任何內容。 當我重新啟動 spring 容器時,所有數據都消失了。 我只是不明白為什么數據沒有保存在數據庫中。

這是我的 docker-compose 文件:

services:
  sales-service:
    container_name: service-container
    image: "mab123/sales-service:latest"
    environment:
      PG_HOST: postgres-container
    ports:
      - "8081:8081"
    networks:
      - internal
    depends_on:
      - postgres

  postgres:
    container_name: postgres-container
    image: postgres
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
      POSTGRES_MULTIPLE_DATABASES: sales, keycloak
      POSTGRES_INITDB_ARGS: "--auth-host=scram-sha-256 --auth-local=scram-sha-256"
      PGDATA: /data/postgres
    volumes:
      - postgres:/data/postgres
      - ./src/main/resources/pg-init-scripts:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"
    restart: unless-stopped
    healthcheck:
      test: "PGPASSWORD=${POSTGRES_PASSWORD:-postgres} pg_isready -h 127.0.0.1 -U ${POSTGRES_USER:-postgres} -d sales"
    networks:
      - internal

  flyway:
    container_name: flyway
    image: flyway/flyway
    command: -url=jdbc:postgresql://postgres:5432/sales -user=postgres -password=postgres -locations=filesystem:/flyway/sql -connectRetries=60 migrate
    volumes:
      - ./src/main/resources/db/migration/:/flyway/sql/
    depends_on:
      postgres:
        condition: service_healthy
    networks:
      - internal

  keycloak:
    container_name: keycloak-container
    image: "quay.io/keycloak/keycloak:latest"
    volumes:
      - ./src/main/resources/keycloak/realms.json:/opt/keycloak/data/import/realms.json
    env_file:
      - src/main/resources/keycloak/keycloak.env
    ports:
      - "8080:8080"
    restart: unless-stopped
    entrypoint: [ "/opt/keycloak/bin/kc.sh", "start-dev", "--import-realm" ]
    networks:
      internal:
        aliases:
          - keycloak.keycon.com
    depends_on:
      - postgres

volumes:
  postgres:

networks:
  internal:

我在 docker-compose 文件中沒有發現任何可能出錯的地方,但如果您有任何想法,請告訴我。

這是我的應用程序開發設置:

spring:
  datasource:
    url: jdbc:postgresql://${PG_HOST:localhost}:5432/sales
    username: postgres
    password: postgres
  flyway:
    datasources:
      default:
        enabled: true

PG_HOST 是 postgres docker 容器的名稱。

如前所述,當我創建一個新實體時,我收到一個 JSON 響應,其中包含 DTO object 以及實體中分配的 ID。 但是,當我訪問 Postgres 數據庫容器並執行 psql 命令時,結果顯示零行。

在此處輸入圖像描述

這是一個有趣的話題,我從來沒有想過,但從你最初的想法來看,它告訴我如何顯示數據庫中的內容。 謝謝!

由於沒有您的spring boot源,我無法瀏覽您的sales數據庫,但我可以看到keycloak數據庫。

這是我對來自postgres docker 的keycloak數據庫的實驗。我認為您的sales數據庫未公開或有問題。

數據庫名稱是keycloak ,用戶是Postgres中的keycloak稍后將使用它來訪問數據庫。

我敢肯定,這些步驟可以讓您了解如何查看您的sales數據庫。 我希望有助於在 keycloak 和數據庫之間進行調試。

docker-compose.yml

version: '3.7'

services:
  postgres:
      image: postgres
      volumes:
        - postgres_data:/var/lib/postgresql/data
      environment:
        POSTGRES_DB: keycloak
        POSTGRES_USER: keycloak
        POSTGRES_PASSWORD: password
  keycloak:
      image: quay.io/keycloak/keycloak:18.0.2-legacy
      environment:
        DB_VENDOR: POSTGRES
        DB_ADDR: postgres
        DB_DATABASE: keycloak
        DB_USER: keycloak
        DB_SCHEMA: public
        DB_PASSWORD: password
        KEYCLOAK_USER: admin
        KEYCLOAK_PASSWORD: admin
      ports:
        - 8080:8080 # Expose to user with localhost:8080
      restart: always
      depends_on:
        - postgres

volumes:
  postgres_data:  # Keycloack volume
      driver: local

#1 第一步,獲取postgres容器ID

docker ps -a

->

CONTAINER ID   IMAGE                                     COMMAND                  CREATED          STATUS          PORTS                              NAMES
c48f3f8fea9f   quay.io/keycloak/keycloak:18.0.2-legacy   "/opt/jboss/tools/do…"   54 minutes ago   Up 54 minutes   0.0.0.0:8080->8080/tcp, 8443/tcp   docker-compose-keycloak-1
254a2038d581   postgres                                  "docker-entrypoint.s…"   54 minutes ago   Up 54 minutes   5432/tcp                           docker-compose-postgres-1

#2 第 2 步, postgres容器內的 go

(* 注意:我使用的是 Windows git bash,Linux 不需要winpty

winpty docker exec -it 254a2038d581 bin/bash

-->

root@254a2038d581:/#

#3 第三步,查看Linux版本

cat /etc/os-release

-->

PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"

並檢查我是誰

whoami

-->

root

#4 第 4 步,添加用戶 'keycloak` 並添加 sudo 用戶

(密碼是密碼)

adduser keycloak

-->

Adding user `keycloak' ...
Adding new group `keycloak' (1000) ...
Adding new user `keycloak' (1000) with group `keycloak' ...
usermod -aG sudo keycloak

#5 第五步,切換用戶keycloak並連接數據庫

su keycloak

-->

keycloak@254a2038d581:/$
psql -U keycloak -w

-->

psql (14.5 (Debian 14.5-1.pgdg110+1))
Type "help" for help.

keycloak=#

#6 第六步,獲取連接信息

 \conninfo

-->

You are connected to database "keycloak" as user "keycloak" via socket in "/var/run/postgresql" at port "5432".

#7 第 7 步,列出表和模式

\dt

-->

                     List of relations
 Schema |             Name              | Type  |  Owner
--------+-------------------------------+-------+----------
 public | admin_event_entity            | table | keycloak
 public | associated_policy             | table | keycloak
 public | authentication_execution      | table | keycloak
 public | authentication_flow           | table | keycloak
 public | authenticator_config          | table | keycloak
 public | authenticator_config_entry    | table | keycloak
 public | broker_link                   | table | keycloak
 public | client                        | table | keycloak
 public | client_attributes             | table | keycloak
 public | client_auth_flow_bindings     | table | keycloak
 public | client_initial_access         | table | keycloak
 public | client_node_registrations     | table | keycloak
 public | client_scope                  | table | keycloak
 public | client_scope_attributes       | table | keycloak
 public | client_scope_client           | table | keycloak
 public | client_scope_role_mapping     | table | keycloak
 public | client_session                | table | keycloak
 public | client_session_auth_status    | table | keycloak
 public | client_session_note           | table | keycloak
 public | client_session_prot_mapper    | table | keycloak
 public | client_session_role           | table | keycloak
 public | client_user_session_note      | table | keycloak
 public | component                     | table | keycloak
 public | component_config              | table | keycloak
 public | composite_role                | table | keycloak
 public | credential                    | table | keycloak
 public | databasechangelog             | table | keycloak
 public | databasechangeloglock         | table | keycloak
 public | default_client_scope          | table | keycloak
 public | event_entity                  | table | keycloak
 public | fed_user_attribute            | table | keycloak
 public | fed_user_consent              | table | keycloak
 public | fed_user_consent_cl_scope     | table | keycloak
 public | fed_user_credential           | table | keycloak
 public | fed_user_group_membership     | table | keycloak
 public | fed_user_required_action      | table | keycloak
 public | fed_user_role_mapping         | table | keycloak
 public | federated_identity            | table | keycloak
 public | federated_user                | table | keycloak
 public | group_attribute               | table | keycloak
 public | group_role_mapping            | table | keycloak
 public | identity_provider             | table | keycloak
 public | identity_provider_config      | table | keycloak
 public | identity_provider_mapper      | table | keycloak
 public | idp_mapper_config             | table | keycloak
 public | keycloak_group                | table | keycloak
 public | keycloak_role                 | table | keycloak
 public | migration_model               | table | keycloak
 public | offline_client_session        | table | keycloak
 public | offline_user_session          | table | keycloak
 public | policy_config                 | table | keycloak
 public | protocol_mapper               | table | keycloak
 public | protocol_mapper_config        | table | keycloak
 public | realm                         | table | keycloak
 public | realm_attribute               | table | keycloak
 public | realm_default_groups          | table | keycloak
 public | realm_enabled_event_types     | table | keycloak
 public | realm_events_listeners        | table | keycloak
 public | realm_localizations           | table | keycloak
 public | realm_required_credential     | table | keycloak
 public | realm_smtp_config             | table | keycloak
 public | realm_supported_locales       | table | keycloak
 public | redirect_uris                 | table | keycloak
 public | required_action_config        | table | keycloak
 public | required_action_provider      | table | keycloak
 public | resource_attribute            | table | keycloak
 public | resource_policy               | table | keycloak
 public | resource_scope                | table | keycloak
 public | resource_server               | table | keycloak
 public | resource_server_perm_ticket   | table | keycloak
 public | resource_server_policy        | table | keycloak
 public | resource_server_resource      | table | keycloak
 public | resource_server_scope         | table | keycloak
 public | resource_uris                 | table | keycloak
 public | role_attribute                | table | keycloak
 public | scope_mapping                 | table | keycloak
 public | scope_policy                  | table | keycloak
 public | user_attribute                | table | keycloak
 public | user_consent                  | table | keycloak
 public | user_consent_client_scope     | table | keycloak
 public | user_entity                   | table | keycloak
 public | user_federation_config        | table | keycloak
 public | user_federation_mapper        | table | keycloak
 public | user_federation_mapper_config | table | keycloak
 public | user_federation_provider      | table | keycloak
 public | user_group_membership         | table | keycloak
 public | user_required_action          | table | keycloak
 public | user_role_mapping             | table | keycloak
 public | user_session                  | table | keycloak
 public | user_session_note             | table | keycloak
 public | username_login_failure        | table | keycloak
 public | web_origins                   | table | keycloak

如果您想了解更多信息,\dt+

 Schema |             Name              | Type  |  Owner   | Persistence | Access method |    Size    | Description
--------+-------------------------------+-------+----------+-------------+---------------+------------+-------------
 public | admin_event_entity            | table | keycloak | permanent   | heap          | 8192 bytes |
 public | associated_policy             | table | keycloak | permanent   | heap          | 8192 bytes |
 public | authentication_execution      | table | keycloak | permanent   | heap          | 88 kB      |
 public | authentication_flow           | table | keycloak | permanent   | heap          | 64 kB      |
...

#8 第八步,客戶名單及詳細信息

(如果查詢SELECT * FROM client; ,可以得到所有字段)

SELECT name, client_id  FROM client;

-->

               name               |       client_id
----------------------------------+------------------------
 master Realm                     | master-realm
 ${client_account}                | account
 ${client_account-console}        | account-console
 ${client_broker}                 | broker
 ${client_security-admin-console} | security-admin-console
 ${client_admin-cli}              | admin-cli
                                  | app3
                                  | app1
 example Realm                    | example-realm
                                  | app2
 ${client_realm-management}       | realm-management
 ${client_account}                | account
                                  | demo
 ${client_account-console}        | account-console
 ${client_broker}                 | broker
 ${client_security-admin-console} | security-admin-console
 ${client_admin-cli}              | admin-cli

在此處輸入圖像描述

#9 第 9 步,領域列表和詳細信息

SELECT name, id, access_code_lifespan FROM realm;

-->

  name   |                  id                  | access_code_lifespan
---------+--------------------------------------+----------------------
 master  | master                               |                   60
 example | e78f0c77-b44b-48da-850b-9d157e24a439 |                   60

在此處輸入圖像描述

#10 第十步,列出用戶

SELECT * FROM user_entity;

-->

                  id                  | email |           email_constraint           | email_verified | enabled | federation_link | first_name | last_name |               realm_id               |       username       | created_timestamp |     service_account_client_link      | not_before
--------------------------------------+-------+--------------------------------------+----------------+---------+-----------------+------------+-----------+--------------------------------------+----------------------+-------------------+--------------------------------------+------------
 c028a1c0-c9e1-449c-a7b4-2bcc0209748f |       | fe9c8176-c624-46c4-adcf-26f97bfd7c47 | f              | t       |                 |            |           | master                               | admin                |     1663581309951 |                                      |          0
 d87bf317-62fa-42c7-a97e-d354b5f8abab |       | 849e6b1c-ee36-49af-8d86-db273571136f | f              | t       |                 |            |           | e78f0c77-b44b-48da-850b-9d157e24a439 | service-account-demo |     1671620871610 | 5ccdb298-b68e-433b-a09e-27b417bc5bd7 |          0
 22286745-ca01-4e79-9ead-bf87b6d3ef42 |       | 47fac099-52e2-4baa-b97e-a260cbc293bd | f              | t       |                 |            |           | e78f0c77-b44b-48da-850b-9d157e24a439 | user2                |     1671585500197 |                                      |          0
 f2b7cd6b-7f6c-4f77-b2f8-a8f406a9fec4 |       | 0b2edfb4-476c-40c5-a83f-77c7998e3417 | f              | t       |                 |            |           | e78f0c77-b44b-48da-850b-9d157e24a439 | user3                |     1671586002650 |                                      |          0
 4c220068-dba4-414f-909d-979d549e8824 |       | 432e3b6c-9697-49ef-bfde-da6e6ba86308 | f              | t       |                 |            |           | e78f0c77-b44b-48da-850b-9d157e24a439 | service-account-app3 |     1669770194446 | b06ed222-f458-4bb5-aeda-7a7ef759ce79 |          0
 d9bb2e1e-47b1-417b-b62c-c91ee9903823 |       | 6ca1dd29-4f5b-4fb8-a860-52db1a6afecb | f              | t       |                 |            |           | e78f0c77-b44b-48da-850b-9d157e24a439 | service-account-app1 |     1669770220095 | 291ebd07-f061-4a73-84aa-43bffe9d04cb |          0
 7f46d52f-130c-4b18-9a73-bc1617edac09 |       | 86e5372e-ca08-4616-8191-cc7f15806744 | f              | t       |                 |            |           | e78f0c77-b44b-48da-850b-9d157e24a439 | service-account-app2 |     1669770245105 | f931e207-820a-4f19-b9e5-255be90366ed |          0
 2b397d5d-2c54-4cb9-932d-9fdd18d018ba |       | 117960f6-5071-42d3-b052-f9e9f420468b | f              | t       |                 |            |           | e78f0c77-b44b-48da-850b-9d157e24a439 | test                 |     1670617022033 |                                      |          0
 417a6295-08b4-4bcc-86a8-ce2c1f158ede |       | b835e6a9-627a-414c-9d05-00748afadc47 | f              | f       |                 |            |           | e78f0c77-b44b-48da-850b-9d157e24a439 | user1                |     1671585149910 |                                      |          0

在此處輸入圖像描述

參考

PostgreSQL:顯示表在PostgreSQL

PostgreSQL 展示表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM