docker - Keycloak Docker 容器在重启容器后无法启动

标签 docker wildfly keycloak

我有一个 Keycloak 安装在 docker-compose 环境中作为 docker 容器运行。每天晚上,我的备份都会停止相关容器,执行数据库和卷备份并再次重新启动容器。大多数情况下它有效,但 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           | ]

Keycloak 的 docker-compose.yml 条目如下所示,重要数据明显被删除
  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=adminKEYCLOAK_PASSWORD 环境变量,否则容器会提示用户已经存在并且不再启动。知道如何解决这个问题吗?

最佳答案

2021 年 5 月 23 日更新:
这个问题已经在 RedHats Jira 上解决了,好像在 12 版本中已经解决了。相关的 GitHub pull request 可以在这里找到:https://github.com/keycloak/keycloak-containers/pull/286

根据 RedHat 支持,这是一个已知的“问题”,不应修复。他们希望专注于移除和重新创建容器的工作流程,而不是启动和停止。他们同意普遍存在的问题,但表示目前没有可用资源。停止和启动容器是当前不支持的操作。
请参阅例如 https://issues.redhat.com/browse/KEYCLOAK-13094?jql=project%20%3D%20KEYCLOAK%20AND%20text%20~%20%22docker%20restart%22 以供引用

关于docker - Keycloak Docker 容器在重启容器后无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62402630/

相关文章:

oauth-2.0 - 如何获取访问 token : keycloak 中的角色

java - Keycloak:使查询字符串参数在标记 FreeMarker 模板中可用

Docker-Compose 在不同端口中运行一个镜像的多个实例

java - 是-XX :MaxRAMFraction=1 safe for production in a containered environment?

docker - 无法启动服务应用程序 : OCI runtime create failed: container_linux. go:349

reactjs - 当我们使用react/next时,为什么需要在docker-compose中添加volume选项?

Wildfly 9 - 如何将 jvm 参数添加到各个服务器

java - Keycloak - 是否可以在领域之间共享一组公共(public)用户?

Primefaces push 和 Wildfly

wildfly - Wildfly 10 集群(域)中的 Artemis (ActiveMQ) 消息传递