[英]Cant connect dockerized springboot application to not dockerized postgres database (localhost)
[英]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
postgres
容器IDdocker 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
postgres
容器内的 go (* 注意:我使用的是 Windows git bash,Linux 不需要winpty
)
winpty docker exec -it 254a2038d581 bin/bash
-->
root@254a2038d581:/#
cat /etc/os-release
-->
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
并检查我是谁
whoami
-->
root
(密码是密码)
adduser keycloak
-->
Adding user `keycloak' ...
Adding new group `keycloak' (1000) ...
Adding new user `keycloak' (1000) with group `keycloak' ...
usermod -aG sudo keycloak
keycloak
并连接数据库su keycloak
-->
keycloak@254a2038d581:/$
psql -U keycloak -w
-->
psql (14.5 (Debian 14.5-1.pgdg110+1))
Type "help" for help.
keycloak=#
\conninfo
-->
You are connected to database "keycloak" as user "keycloak" via socket in "/var/run/postgresql" at port "5432".
\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 |
...
(如果查询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
SELECT name, id, access_code_lifespan FROM realm;
-->
name | id | access_code_lifespan
---------+--------------------------------------+----------------------
master | master | 60
example | e78f0c77-b44b-48da-850b-9d157e24a439 | 60
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.