我已在我的Digital Ocean Docker Droplet上初始化https://hub.docker.com/r/jboss/keycloak/。
$docker run -e KEYCLOAK_USER=admin -e -p 8080:8080 KEYCLOAK_PASSWORD={password with upcase etc.} jboss/keycloak
成功
一切运行良好,服务器在端口上的Droplets IP地址中启动:8080。
当我从URL中的UI进入管理控制台时,问题就开始了。有一条消息:“需要HTTPS”。这是一个真正的问题,我找到的唯一解决方案是从控制台登录Keycloak并在没有UI的情况下从管理控制台更改HTTPS = required的设置。
然后我打开了我的Docker容器的bash: $docker exec -it keycloak bash
成功
当我输入我的命令登录keycloak / bin文件夹时:
cd keycloak/bin
keycloak/bin $./kcadm.sh config credentials --server http://<droplet IP>:8080/auth --realm master --user admin --password {password with upcase etc.}
bash冻结并在一段时间后发出超时消息
从bash登录的原因将完成:
keycloak/bin $ ./kcadm.sh update realms/master -s sslRequired=NONE
。
希望能解决所需的HTTPS原始问题。
答案 0 :(得分:16)
发布端口8443(HTTPS)并使用它而不是8080(HTTP):
docker run \
--name keycloak \
-e KEYCLOAK_USER=myadmin \
-e KEYCLOAK_PASSWORD=mypassword \
-p 8443:8443 \
jboss/keycloak
Keycloak在此设置中为https生成自签名证书。当然,这不是生产设置。
答案 1 :(得分:5)
这是一个解决方案,当使用https://fiddle.jshell.net/mj4mvvd5/5/作为起点而DigitalOcean作为服务提供商时,也授予了对没有安全性的管理控制台的访问权限:
启动容器:
$ docker run {containerName}
打开容器的bash:
$ docker exec -it {containerName} bash
转到:
$ cd keycloak/bin
使用以下命令创建新的管理员用户:
$ ./add-user-keycloak.sh --server http://{IP}:8080/admin
--realm master --user admin --password newpassword
(不是很多地方建议的add-user.sh)
将DigitalOcean等中的Droplet重新启动到关闭之前创建的激活管理员用户。使用以下命令重新启动Droplet登录后
$ ./kcadm.sh config credentials --server http://localhost:8080/auth
--realm master --user admin
更改领域的ssl设置:
$ ./kcadm.sh update realms/master -s sslRequired=NONE
此解决方案不会创建任何安全性,但允许您访问管理控制台。
在此之后,建议开始工作: https://hub.docker.com/r/jboss/keycloak/
答案 2 :(得分:2)
以下命令序列对我有用
在主机VM上:
docker run --name key -d -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak
docker exec -it key bash
在容器内:
cd keycloak/bin/
./kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin
Logging into http://localhost:8080/auth as user admin of realm master
Enter password: admin
./kcadm.sh update realms/master -s sslRequired=NONE
答案 3 :(得分:1)
以防万一有人想在 Docker Swarm 上使用它,使用机密来存储证书文件和管理员凭据:
keycloak:
image: jboss/keycloak
container_name: keycloak-server
hostname: keycloak-server
ports:
- target: 8443 # Keycloak HTTPS port
published: 8443
mode: host
- target: 8080 # Keycloak HTTP port
published: 8080
mode: host
networks:
default:
aliases:
- keycloak-server
deploy:
replicas: 1
secrets:
- keycloak_user_file
- keycloak_password_file
- source: server_crt
target: /etc/x509/https/tls.crt
uid: '103'
gid: '103'
mode: 0440
- source: server_key
target: /etc/x509/https/tls.key
uid: '103'
gid: '103'
mode: 0440
environment:
- KEYCLOAK_USER_FILE=/run/secrets/keycloak_user_file
- KEYCLOAK_PASSWORD_FILE=/run/secrets/keycloak_password_file
secrets:
server_crt:
file: ./certs/server.crt
server_key:
file: ./certs/server.key
keycloak_user_file:
file: ./keycloak/adminuser
keycloak_password_file:
file: ./keycloak/adminpassword
答案 4 :(得分:0)
在尝试配置凭据时,我也遇到了bash冻结的情况。
在--password
命令中添加config credentials
参数导致成功执行:
./kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password {YOUR_PASSWORD_HERE}
执行./kcadm.sh config credentials
,以获取传递参数的安全/替代方法的示例。
答案 5 :(得分:0)
在 Jboss/Keyclok 12.0.0 之后更新
在服务器中使用以下命令,无需通过 bash 登录 docker 容器。
$ docker exec <container_id> /opt/jboss/keycloak/bin/kcadm.sh update realms/master -s sslRequired=NONE --server http://localhost:8080/auth --realm master --user <admin_username> --password <admin_password>
以realm master的admin用户身份登录http://localhost:8080/auth