在docker容器内运行时如何保存keycloak数据?

Den*_*sel 12 mount docker keycloak podman

我使用docker命令独立运行 keycloak docker run -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:15.0.2

容器停止后如何挂载卷来保存数据?

Duc*_*Mai 8

在职的docker-compose.yml

version: "3.7"

volumes:
  keycloak:

services:

  keycloak:
    image: quay.io/keycloak/keycloak:18.0.2
    ports:
      - 8080:8080
    environment:
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=admin
    volumes:
      - keycloak:/opt/keycloak/data/
    restart: always
    command:
      - "start-dev"
Run Code Online (Sandbox Code Playgroud)


Den*_*sel 6

对于生产:

在生产环境中Keycloak应该连接到真实的数据库(mariadb、mssql、mysql、oracle、postgres)。数据存储在那里,因此不需要存储容器中运行的任何内容。

对于发展:

Keycloak 附带了自己的嵌入式基于 Java 的关系数据库,称为 H2。数据存储在/opt/jboss/keycloak/standalone/data/容器内部。

要启动带有已安装卷的容器,您需要:

1、创建具有读写权限的文件夹:

mkdir -m 777 ./keycloak_data
Run Code Online (Sandbox Code Playgroud)

2. 启动已安装卷的容器:

docker run -v ./keycloak_data:/opt/jboss/keycloak/standalone/data/ -p 8080:8080  -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:15.0.2
Run Code Online (Sandbox Code Playgroud)

请注意,如果挂载卷,则只会在容器的第一次启动时考虑KEYCLOAK_USER和,因此要再次启动容器只需使用:KEYCLOAK_PASSWORD

docker run -v ./keycloak_data:/opt/jboss/keycloak/standalone/data/ -p 8080:8080 quay.io/keycloak/keycloak:15.0.2
Run Code Online (Sandbox Code Playgroud)

  • 在keycloak 21中(不确定什么时候改变的),新的开发映射路径是:````/opt/keycloak/data/h2``` (3认同)
  • 来自 Keycloak 文档“H2 数据库在高并发情况下不太可行”。您应该在实际生产环境中使用外部支持的数据库,而不是 H2。所以这个答案仅适用于“dev”环境。 (2认同)