#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
или похожий ip172.17.0.1
-адрес .2. Спасибо за Ваш ответ,размещение DB_ADDR: host.docker.internal сработало для меня, но не могли бы вы подсказать, как мы можем использовать базу данных, размещенную в Azure или другом репозитории, в таком случае, как мы передадим эту переменную среды DB_ADDR