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

ktca8awb  于 2023-04-20  发布在  Docker
关注(0)|答案(4)|浏览(338)

我试图将配置从一个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
8hhllhi2

8hhllhi21#

说明

首先,你需要将文件复制到你的容器中,然后才能将其导入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
r8xiu3jd

r8xiu3jd2#

为了总结@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
bvjveswy

bvjveswy3#

这个配置为我工作:

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
mzaanser

mzaanser4#

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

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

相关问题