繁体   English   中英

如何在 docker-compose 部署中正确添加持久性,包括 postgres 和 keycloak

[英]How to properly add persistence in docker-compose deployment including postgres and keycloak

我正在尝试创建一个持久的 docker-compose 部署。 以前我通过简单地将本地目录安装到 docker 容器来完成此操作。 它工作得很好。 但是,当我尝试将 keycloak 添加到组合中时,它会产生错误。

工作撰写文件:

version: '3'

volumes:
  postgres_data:
      driver: local

services:
  postgres:
      image: postgres
      volumes:
        - postgres_data:/var/lib/postgresql/data
        - ./init:/docker-entrypoint-initdb.d/
      environment:
        POSTGRES_DB: keycloak
        POSTGRES_USER: keycloak
        POSTGRES_PASSWORD: password
      ports:
        - 5432:5432
  keycloak:
      image: quay.io/keycloak/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: admin
      ports:
        - 8080:8080
      depends_on:
        - postgres

非工作撰写文件:

version: '3'

services:
  postgres:
      image: postgres
      volumes:
        - ./postgres_data:/var/lib/postgresql/data
        - ./init:/docker-entrypoint-initdb.d/
      environment:
        POSTGRES_DB: keycloak
        POSTGRES_USER: keycloak
        POSTGRES_PASSWORD: password
      ports:
        - 5432:5432
  keycloak:
      image: quay.io/keycloak/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: admin
      ports:
        - 8080:8080
      depends_on:
        - postgres

它生成的错误示例:

keycloak_1  | 19:18:17,191 FATAL [org.keycloak.services] (ServerService Thread Pool -- 61) Error during startup: java.lang.RuntimeException: Failed to connect to database

keycloak_1  | 19:18:17,631 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([("subsystem" => "microprofile-metrics-smallrye")]): java.lang.NullPointerException

keycloak_1  | 19:18:17,639 ERROR [org.jboss.as.server] (ServerService Thread Pool -- 46) WFLYSRV0022: Deploy of deployment "keycloak-server.war" was rolled back with no failure message


从错误消息来看,即使使用了关键字“depends”,似乎也没有第一次生成数据库。

问题是如何修复它/解决它。

由于没有人正确回答我的问题,这是我发现使用依赖项的解决方案。 向 postgresql 清单添加以下行:

healthcheck:
  test: ["CMD-SHELL", "pg_isready -U keycloak"]
  interval: 10s
  timeout: 5s
  retries: 5

和钥匙斗篷:

depends_on:
  postgres-database:
    condition: service_healthy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM