Keycloak / Docker重新生成MySQL数据库表

时间:2019-01-03 19:57:37

标签: mysql docker liquibase keycloak

我正在与一个docker compose服务组合作:

  • 钥匙斗篷
  • MySQL

这是一个相当基本的设置。我只是在用Keycloak测试一些东西。

我观察到的是,有时,当我重新启动所有服务时,Keycloak将失败并抱怨liqubase dbchangelog表不存在。但是,当我检查桌子时,它们在那里。

似乎正在发生的事情是某些原因导致Keycloak重新生成数据库表(通过Liquibase)。我可以通过保持MySQL一直运行并仅启动和停止Keycloak来解决此问题,但是如果其他人正在使用它并意外停止所有服务,则他们可能会丢失Keycloak表中的所有内容。

两个问题:

  • 为什么会这样?为什么Keycloak认为这些表不存在? Keycloak和MySQL之间是否存在竞争条件?我的印象是,“ depends_on”应使docker等待MySQL启动后再启动Keycloak
  • 是否有Keycloak设置来禁用表的自动创建?更好的是,是否可以在docker-compose文件中设置一个env变量来禁用此变量?

我的docker-compose文件:

version: '3'
services:
  mysql:
    image: mysql:5.7
    ports:
    - "3319:3306"
    environment:
      MYSQL_USER: keycloak
      MYSQL_PASSWORD: keycloak
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
      MYSQL_DATABASE: keycloak
   volumes:
    - ~/test/mysql:/var/lib/mysql
  keycloak:
    image: jboss/keycloak:4.6.0.Final
    depends_on:
    - mysql
    environment:
      DB_VENDOR: MYSQL
      DB_ADDR: mysql
      DB_DATABASE: keycloak
      DB_USER: keycloak
      DB_PASSWORD: keycloak
      KEYCLOAK_LOGLEVEL: INFO
      ROOT_LOGLEVEL: INFO
      PROXY_ADDRESS_FORWARDING: "true"
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: password
      JDBC_PARAMS: "useSSL=false"
    ports:
    - "6982:8080"

0 个答案:

没有答案