在使用docker-compose

时间:2019-02-20 23:18:55

标签: docker keycloak

我正在尝试将配置从一个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和Dockerfile(未添加导入),它们在回答这个问题时可能会有所帮助。预先感谢

# 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

2 个答案:

答案 0 :(得分:2)

总结@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

答案 1 :(得分:0)

说明

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