Keycloak не сохраняет данные в PostgreSQL в докере - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь запустить 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"

Dockerfile для 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-postgres является базой данных для Keycloak и не сохраняет никаких данных.

Также я создал базу данных на этом сервере с тем же именем, что и $ {KEYCLOAK_DATABASE}, и создал пользователя и дал все привилегии этому серверу, поэтому это не будет ошибкой разрешения.

И я правильно предоставил все переменные окружения.

Также относительно комментария кода в keycloak Dockerfile, я пытаюсь импортировать область, которая не работает.

Когда я комментирую, что POSTGRES_PORT_5432_TCP_ADDR in docker-compose.yml выдает эту ошибку:

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}'"

1 Ответ

0 голосов
/ 10 октября 2018

Это не связано с Keycloak, это больше связано с контейнером Docker (и postgres). Каждый раз, когда вы останавливаете контейнер, вы теряете свои данные.

То, что вам нужно использовать, это тома ... значение. Подключите драйвер на вашем компьютере к док-контейнеру. Таким образом, каждый раз, когда контейнер запускается снова, он использует этот диск, поэтому может сохранять данные. Вам нужно что-то вроде:

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
...