簡體   English   中英

Keycloak沒有在Docker中的PostgreSQL中保存數據

[英]Keycloak is not saving data in PostgreSQL in docker

我正在嘗試在docker中運行keycloak並將其數據保存在PostgreSQl中。 但是什么都沒有被保存。

這是docker-compose.yml文件:

version: '2'

services:
  db:
    build: "./Main Database Backup"
    environment:
      POSTGRES_DB: ${DB_POSTGRES_APP_DATABASE}
      POSTGRES_USER: ${DB_POSTGRES_APP_USER}
      POSTGRES_PASSWORD: ${DB_POSTGRES_APP_PASSW}
      PGDATA: /var/lib/postgresql/data/pgdata
    ports:
      - "5432:5432"
    restart: unless-stopped

  keycloak-postgres:
    image: postgres:10-alpine
    environment:
      POSTGRES_DB: ${KEYCLOAK_DATABASE}
      POSTGRES_PASSWORD: ${KEYCLOAK_DATABASE_PASSW}
      POSTGRES_USER: ${KEYCLOAK_DATABASE_USER}
      PGDATA: /var/lib/postgresql/data/pgdata
    restart: unless-stopped

  keycloak:
    build: "./Keycloak Realm Export"
    depends_on:
      - keycloak-postgres
    environment:
      KEYCLOAK_USER: ${KEYCLOAK_USER}
      KEYCLOAK_PASSWORD: ${KEYCLOAK_PASSWORD}
      POSTGRES_USER: ${KEYCLOAK_DATABASE_USER}
      POSTGRES_PASSWORD: ${KEYCLOAK_DATABASE_PASSW}
      POSTGRES_PORT_5432_TCP_ADDR: keycloak-postgres
    ports:
      - "8080:8080"

用於keycloak

FROM jboss/keycloak:3.4.3.Final

WORKDIR /opt/jboss/keycloak

COPY realm-export.json initial_data.json

# RUN ./bin/standalone.sh -Dkeycloak.migration.action=import -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=initial_data.json -Dkeycloak.migration.strategy=OVERWRITE_EXISTING

RUN ./bin/add-user-keycloak.sh -r master -u admin -p password

ENTRYPOINT [ "/opt/jboss/docker-entrypoint.sh" ]

CMD ["-b", "0.0.0.0", "-Dkeycloak.import=/opt/jboss/keycloak/initial_data.json"]

db是這是我的API和它的正常工作主數據庫。 keycloak-postgreskeycloak-postgres的數據庫,它不保存任何數據。

另外,我還在該服務器上創建了一個與$ {KEYCLOAK_DATABASE}相同名稱的數據庫,並且我創建了一個用戶並賦予了該服務器所有特權,因此不會出現權限錯誤。

而且我已經正確提供了所有環境變量。

另外,關於keycloak Dockerfile中的注釋代碼,我正在嘗試導入無法正常工作的領域。

當我在docker-compose.yml評論POSTGRES_PORT_5432_TCP_ADDR ,拋出此錯誤:

2018-08-31T08:22:05.251344638Z 08:22:05,250 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([
2018-08-31T08:22:05.251375320Z     ("subsystem" => "datasources"),
2018-08-31T08:22:05.251383320Z     ("data-source" => "KeycloakDS")
2018-08-31T08:22:05.251402169Z ]) - failure description: "WFLYCTL0211: Cannot resolve expression 'jdbc:postgresql://${env.POSTGRES_PORT_5432_TCP_ADDR}:${env.POSTGRES_PORT_5432_TCP_PORT:5432}/${env.POSTGRES_DATABASE:keycloak}'"

這與Keycloak無關,與Docker容器有關(與postgres無關)。 每次停止容器時,您都會丟失數據。

您需要使用的是Volumes ...的含義。 將PC上的驅動程序映射到docker容器。 這樣,每次容器再次啟動時,容器都會使用該驅動器,因此可以保留數據。 您需要遵循以下要求:

version: '2'

volumes:
  postgres_data:
    driver: local

services:
  db:
    build: "./Main Database Backup"
    environment:
      POSTGRES_DB: ${DB_POSTGRES_APP_DATABASE}
      POSTGRES_USER: ${DB_POSTGRES_APP_USER}
      POSTGRES_PASSWORD: ${DB_POSTGRES_APP_PASSW}
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./data:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"
    restart: unless-stopped

暫無
暫無

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

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