Каков формат файла Yaml в докере keycloak для подключения к внешней БД postgres URL

#postgresql #docker-compose #yaml #dockerfile #keycloak

Вопрос:

Мне нужно настроить сервер докеров Keycloak с помощью внешнего URL-адреса подключения к базе данных postgres. Вот мое текущее содержимое файла yaml, которое работает с изображением контейнера POstgres docker, как уже упоминалось

 version: '3'

volumes:
  postgres_data:
    driver: local

services:
  postgres:
    image: postgres:11
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: keycloak
      POSTGRES_PASSWORD: password
    ports:
      - 5433:5432
  keycloak:
    image:jboss/keycloak:latest
    environment:
      DB_VENDOR: POSTGRES
      DB_ADDR: postgres
      DB_DATABASE: keycloak
      DB_USER: keycloak
      DB_SCHEMA: public
      DB_PASSWORD: password
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: password
      KEYCLOAK_LOGLEVEL: DEBUG
      ROOT_LOGLEVEL: DEBUG
    ports:
      - 8080:8080
      - 8443:8443
    depends_on:
      - postgres
 

Я проверил официальную документацию для передачи URL-адреса подключения к внешней БД.
Но точно не понял, какие изменения потребуются в файле YAML
ref: https://hub.docker.com/r/jboss/keycloak/

Я попытался удалить раздел Postgres и depends_on из служб и передал сведения о подключении к базе данных в разделе среды Kecyloak в yaml, но это не сработало для меня

Может ли кто-нибудь предложить правильные изменения файла YAML для использования URL-адреса подключения PostgresDB

Спасибо.

Ответ №1:

Контейнеры Docker могут видеть друг друга по имени службы, поэтому здесь имя службы postgres фактически является URL-адресом подключения для keycloak контейнера.

 version: '3'

volumes:
  postgres_data:
    driver: local

services:
  postgres: # Service name 
    image: postgres:11
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: keycloak
      POSTGRES_PASSWORD: password
    ports:
      - 5433:5432
  keycloak:
    image:jboss/keycloak:latest
    environment:
      DB_VENDOR: POSTGRES
      DB_ADDR: postgres # <<< This is the address, change it to your external db ip/domain
      DB_DATABASE: keycloak
      DB_USER: keycloak
      DB_SCHEMA: public
      DB_PASSWORD: password
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: password
      KEYCLOAK_LOGLEVEL: DEBUG
      ROOT_LOGLEVEL: DEBUG
    ports:
      - 8080:8080
      - 8443:8443
    depends_on:
      - postgres

 

Комментарии:

1. Можно ли не использовать изображение/контейнер postgres , а просто передать сообщение Postgres ConnectionURL

2. Конечно, это возможно, убедитесь, что пользователь базы данных существует для блокировки ключей.

3. Можете ли вы поделиться форматом файла yaml для этого нам нужен только контейнер с ключом и внешняя база данных postgres, подключенная к ключу, используя только URL-адрес подключения

4. Просто удалите все, что вложено в postgres

5. Попробовал нижеприведенную версию: ‘3’ услуги: ключ: изображение: quay.io/keycloak/keycloak:latest среда: DB_VENDOR: POSTGRES DB_ADDR: локальный хост DB_PORT: 5432 БАЗА ДАННЫХ DB_DATABASE: Локальный ключ DB_USER: postgres DB_SCHEMA: общедоступный пароль DB_PASSWORD: Adm!n@123 ПАРОЛЬ пользователя: локальный ключ, пароль, пароль: локальные порты: — 8080:8080 удалены все данные, связанные с postgres, только что переданные переменные среды также передали IP-адрес вместо localhost все еще не подключается

Ответ №2:

Я попробовал в соответствии с предложенным вами форматом файла yaml

 version: '3'
volumes:
  postgres_data:
      driver: local
services:
  postgres:
      image: postgres
      volumes:
- postgres_data:/var/lib/postgresql/data
      environment:
        POSTGRES_DB: keycloakLocal
        POSTGRES_USER: postgres
        POSTGRES_PASSWORD: Adm!n@123
  keycloak:
      image: quay.io/keycloak/keycloak:latest
      environment:
        DB_VENDOR: POSTGRES
        DB_ADDR: localhost
        DB_PORT: 5432
        DB_DATABASE: keycloakLocal
        DB_USER: postgres
        DB_SCHEMA: public
        DB_PASSWORD: Adm!n@123
        KEYCLOAK_USER: localkeycloak
        KEYCLOAK_PASSWORD: local
      ports:
- 8080:8080
      depends_on:
- postgres
 

Но все равно возникает ошибка при подключении к базе
данных База данных postgres размещена на локальном хосте

Все еще получаю ошибку

отказано в подключении базы данных

Комментарии:

1. Когда вы пишете localhost, он является локальным для контейнера keycloak. Контейнеры видят хост-машину по-другому. Это либо host.docker.internal или похожий ip 172.17.0.1 -адрес .

2. Спасибо за Ваш ответ,размещение DB_ADDR: host.docker.internal сработало для меня, но не могли бы вы подсказать, как мы можем использовать базу данных, размещенную в Azure или другом репозитории, в таком случае, как мы передадим эту переменную среды DB_ADDR