使用 docker-compose 时导入 keycloak 配置文件

问题描述 投票:0回答:5

我正在尝试将配置从一个 keycloak 实例导入到许多不同的 keycloak 实例中(每个实例都针对同一个应用程序,只是 CICD 流程中的不同部分)

我通过 Docker 运行 keycloak 并发现很难导入所需的 json 文件

为了获取我想要导入的实际数据,我进入所需的领域,只需单击导出按钮并选择客户端等。这将一个文件下载到我的浏览器,现在我想在构建 Docker 容器时导入该文件

我尝试了很多在网上找到的不同方法,但似乎都不起作用,所以我希望得到一些帮助

我尝试的第一件事是使用以下命令通过 docker-compose 文件导入文件

KEYCLOAK_IMPORT: /realm-export.json

我尝试的下一件事也在我尝试过的 docker-compose 中

command: "-b 0.0.0.0 -Djboss.http.port=8080 -Dkeycloak.migration.action=import -Dkeycloak.import=realm-export.json

最后,我尝试进入我的 Dockerfile 并使用以下命令作为我的 CMD 运行导入

CMD ["-b 0.0.0.0", "-Dkeycloak.import=/opt/jboss/keycloak/realm-export.json"]

下面是我当前的 docker-compose 和 Dockerfiles,没有添加导入,它们可能对回答这个问题有一些帮助。预先感谢

# Dockerfile
FROM jboss/keycloak:4.8.3.Final
COPY keycloak-metrics-spi-1.0.1-SNAPSHOT.jar keycloak/standalone/deployments

以及我的 docker-compose 文件中与 keycloak 相关的部分

postgres:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: keycl0ak
      POSTGRES_USER: keycl0ak
      POSTGRES_PASSWORD: password
    ports:
      - 5431:5431

  keycloak:
    build:
      context: services/keycloak
    environment:
      DB_VENDOR: POSTGRES
      DB_ADDR: postgres
      DB_DATABASE: keycl0ak
      DB_USER: keycl0ak
      DB_PASSWORD: password
      KEYCLOAK_USER: administrat0r
      KEYCLOAK_PASSWORD: asc88a8c0ssssqs
    ports:
      - 8080:8080
    depends_on:
      - postgres

volumes:
    postgres_data:
      driver: local
docker keycloak
5个回答
47
投票

说明

首先您需要将文件复制到容器中,然后才能将其导入 Keycloak。您可以将

realm-export.json
放在
docker-compose.yml
旁边的文件夹中,假设我们称之为
imports
。这可以使用
volumes:
来实现。将文件复制到容器中后,您可以像以前一样使用
command:
,指向容器中的正确文件。

文件结构

/your_computer/keycloak_stuff/

|--
docker-compose.yml

|--
imports
->
realm-export.json

Docker-Compose

这就是

docker-compose.yml
经过更改后的样子:

postgres:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: keycl0ak
      POSTGRES_USER: keycl0ak
      POSTGRES_PASSWORD: password
    ports:
      - 5431:5431

  keycloak:
    build:
      context: services/keycloak
    volumes:
      - ./imports:/opt/jboss/keycloak/imports
    command: 
      - "-b 0.0.0.0 -Dkeycloak.import=/opt/jboss/keycloak/imports/realm-export.json"
    environment:
      DB_VENDOR: POSTGRES
      DB_ADDR: postgres
      DB_DATABASE: keycl0ak
      DB_USER: keycl0ak
      DB_PASSWORD: password
      KEYCLOAK_USER: administrat0r
      KEYCLOAK_PASSWORD: asc88a8c0ssssqs
    ports:
      - 8080:8080
    depends_on:
      - postgres

volumes:
    postgres_data:
      driver: local

20
投票

为了总结@JesusBenito和@raujonas的答案,可以更改docker-compose,以便您使用keyloak环境KEYCLOAK_IMPORT:

keycloak:
    volumes:
      - ./imports:/opt/jboss/keycloak/imports
    # command: not needed anymore
    #  - "-b 0.0.0.0 -Dkeycloak.import=/opt/jboss/keycloak/imports/realm-export.json"
    environment:
      KEYCLOAK_IMPORT: /opt/jboss/keycloak/imports/realm-export.json -Dkeycloak.profile.feature.upload_scripts=enabled          
      DB_VENDOR: POSTGRES
      DB_ADDR: postgres
      DB_DATABASE: keycl0ak
      DB_USER: keycl0ak
      DB_PASSWORD: password
      KEYCLOAK_USER: administrat0r
      KEYCLOAK_PASSWORD: asc88a8c0ssssqs

11
投票

在版本

21.0.2
中,唯一对我有用的是这个命令行参数和卷的精确映射。设置自定义文件夹似乎不像其他答案那样起作用:

keycloak:
    container_name: keycloak
    image: quay.io/keycloak/keycloak:21.0.2
    restart: always
    environment:
    ports:
      - '8081:8081'
    command: -v start --import-realm
    volumes:
      - ./keycloak/imports:/opt/keycloak/data/import

2
投票

这个配置对我有用:

keycloak:
    image: mihaibob/keycloak:15.0.1
    container_name: keycloak
    ports:
      - "9091:8080"
    volumes:
      - ./src/test/resources/keycloak:/tmp/import
    environment:
      ...
      KEYCLOAK_IMPORT: /tmp/import/global.json

0
投票

如果有人使用

bitnami/keycloak
图像并尝试导入领域,那么以下配置可以为我完成。关键是设置环境变量
KEYCLOAK_EXTRA_ARGS
.

keycloak:
  image: bitnami/keycloak:24.0.3
  container_name: keycloak
  ...
  volumes:
    - config/import:/opt/keycloak/data/import
  environment:
    ...
    KEYCLOAK_EXTRA_ARGS: "-Dkeycloak.import=/opt/keycloak/data/import/"
© www.soinside.com 2019 - 2024. All rights reserved.