当我启动 keycloak 时,我通过以下命令启动 Docker:
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:24.0.2 start-dev
但是通过这种方式,领域已经创建了,我想构建一个自定义领域。所以基本上当我创建 Docker 映像时,我想创建自定义领域。我手动创建了它,然后部分导出,因为我们无法完全导出它。
所以我的问题是:我可以使用自定义领域在本地启动 keycloak 吗?
我使用的是 Mac。
您可以在 Mac 上通过 cURL 命令创建自定义领域。
另外,建议使用 Docker Desktop 的 docker compose
即使删除了 docker 容器,它也不会丢失您的自定义领域。
只需“docker run”和“docker rm”即可删除容器。 领域和用户的所有设置都将丢失。
如果使用 docker compose 和 volume,则可以保留 Keycloak 的设置。
另存为
docker-compose.yml
version: '3.8'
services:
postgres:
image: postgres:15.6
container_name: postgres_db
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: keycloak
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: password
keycloak_web:
image: quay.io/keycloak/keycloak:24.0.2
container_name: keycloak_web
environment:
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres:5432/keycloak
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: password
KC_HOSTNAME: localhost
KC_HOSTNAME_STRICT: false
KC_HOSTNAME_STRICT_HTTPS: false
KC_LOG_LEVEL: info
KC_METRICS_ENABLED: true
KC_HEALTH_ENABLED: true
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
command: start-dev
depends_on:
- postgres
ports:
- 8080:8080
volumes:
postgres_data:
转到“应用程序”>“实用程序”>“终端”,或使用 Spotlight 搜索(Cmd + 空格键)并输入“终端”将其打开
docker compose up -d
http://localhost:8080
凭证
username: admin
password: admin
MASTER_TOKEN=$(curl --location --request POST http://localhost:8080/realms/master/protocol/openid-connect/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=admin-cli' \
--data-urlencode 'username=admin' \
--data-urlencode 'password=admin' \
--data-urlencode 'grant_type=password' | jq -r '.access_token')
echo $MASTER_TOKEN
curl --silent --show-error -L -X POST "http://localhost:8080/admin/realms" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ""$MASTER_TOKEN" \
--data '{"realm":"demo-realm","enabled":true}'
主令牌的默认生命周期为1分钟
所以拿到master token后需要快速调用 或者
扩大测试范围。