У меня есть установка Keycloak, работающая как контейнер docker в среде docker -compose. Каждую ночь моя резервная копия останавливает соответствующие контейнеры, выполняет резервное копирование БД и тома и снова перезапускает контейнеры. В большинстве случаев это работает, но у Keycloak, похоже, есть проблема, и он больше не запускается. При просмотре журналов появляется сообщение об ошибке:
The batch failed with the following error: :
keycloak | WFLYCTL0062: Composite operation failed and was rolled back. Steps that failed:
keycloak | Step: step-9
keycloak | Operation: /subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql, driver-module-name=org.postgresql.jdbc, driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
keycloak | Failure: WFLYCTL0212: Duplicate resource [
keycloak | ("subsystem" => "datasources"),
keycloak | ("jdbc-driver" => "postgresql")
keycloak | ]
...
The batch failed with the following error: :
keycloak | WFLYCTL0062: Composite operation failed and was rolled back. Steps that failed:
keycloak | Step: step-9
keycloak | Operation: /subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql, driver-module-name=org.postgresql.jdbc, driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
keycloak | Failure: WFLYCTL0212: Duplicate resource [
keycloak | ("subsystem" => "datasources"),
keycloak | ("jdbc-driver" => "postgresql")
keycloak | ]
Запись docker-compose.yml
для Keycloak выглядит следующим образом: важные данные явно удалены
keycloak:
image: jboss/keycloak:8.0.1
container_name: keycloak
environment:
- PROXY_ADDRESS_FORWARDING=true
- DB_VENDOR=postgres
- DB_ADDR=db
- DB_DATABASE=keycloak
- DB_USER=keycloak
- DB_PASSWORD=<password>
- VIRTUAL_HOST=<url>
- VIRTUAL_PORT=8080
- LETSENCRYPT_HOST=<url>
volumes:
- /opt/docker/keycloak-startup:/opt/jboss/startup-scripts
Объем, который я отображаю, является там, чтобы внести некоторые изменения в WildFly, чтобы убедиться, что он хорошо работает с обратным прокси:
embed-server --std-out=echo
# Enable https listener for the new security realm
/subsystem=undertow/ \
server=default-server/ \
http-listener=default \
:write-attribute(name=proxy-address-forwarding, \
value=true)
# Create new socket binding with proxy https port
/socket-binding-group=standard-sockets/ \
socket-binding=proxy-https \
:add(port=443)
# Enable https listener for the new security realm
/subsystem=undertow/ \
server=default-server/ \
http-listener=default \
:write-attribute(name=redirect-socket, \
value="proxy-https")
После остановки контейнера он больше не запускается с сообщениями, показанными выше. Однако удаление контейнера и его воссоздание работает нормально. Я пробовал убрать громкость после первоначального запуска, это тоже ничего не меняет. Я уже узнал, что мне нужно удалить переменные среды KEYCLOAK_USER=admin
и KEYCLOAK_PASSWORD
после начальной загрузки, поскольку в противном случае контейнер жалуется, что пользователь уже существует и больше не запускается. Есть идеи, как это исправить?