我使用 docker
docker run -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:15.0.2
的命令独立运行 keycloak
容器停止后如何挂载卷来保存数据?
工作中
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"
在生产环境中,Keycloak 应该连接到真实数据库(mariadb、mssql、mysql、oracle、postgres)。数据存储在那里,因此不需要存储容器中运行的任何内容。
Keycloak 附带了自己的嵌入式基于 Java 的关系数据库,称为 H2。 数据存储在容器内的
/opt/jboss/keycloak/standalone/data/
中。
要启动带有已安装卷的容器,您需要:
mkdir -m 777 ./keycloak_data
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
请注意,如果挂载卷,
KEYCLOAK_USER
和KEYCLOAK_PASSWORD
只会在容器的第一次启动时被考虑,因此要再次启动容器只需使用:
docker run -v ./keycloak_data:/opt/jboss/keycloak/standalone/data/ -p 8080:8080 quay.io/keycloak/keycloak:15.0.2
2023 年更新:
基于@mdryden和@Dennis Meissel的回复,为了使keycloak持久用于本地开发,只需运行以下命令:
mkdir -m 777 ./keycloak_data
docker run -p 8080:8080 -v ./keycloak_data:/opt/keycloak/data/h2 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:22.0.3 start-dev
刚刚检查过,如果您只是通过“docker Desktop”停止并启动 keycloak 容器,则数据例如关于新领域仍然存在。 您还可以向容器添加特定名称,以便在随机生成的容器中找到它。
docker run --name mykeycloak