Docker环境下修改Keycloak默认端口及相关配置问题咨询
Hey,这两个问题都是Docker部署Keycloak时很常见的坑,我来给你拆解清楚:
修改端口分两种场景,看你是只想映射宿主机端口,还是要让容器内的Keycloak本身监听非默认端口:
场景1:仅映射宿主机端口(容器内仍用8080)
这是最简单的方式,启动容器时通过-p参数把宿主机的目标端口映射到容器的8080端口就行。比如把宿主机的8081端口对应容器的8080:docker run -p 8081:8080 quay.io/keycloak/keycloak:latest start-dev这样访问
http://localhost:8081就能打开Keycloak控制台了。场景2:让容器内Keycloak监听自定义端口
如果你需要容器内的Keycloak直接用非8080端口,官方镜像提供了环境变量KC_HTTP_PORT来配置。比如让容器内监听8081,同时映射宿主机8081端口:docker run -e KC_HTTP_PORT=8081 -p 8081:8081 quay.io/keycloak/keycloak:latest start-dev新版Keycloak(17+)还支持
KC_HTTPS_PORT配置HTTPS端口,按需设置即可。
-Djboss.socket.binding.port-offset=100的Dockerfile? 首先得明确:你大概率用的是新版Keycloak(17及以后),因为新版已经彻底抛弃了基于WildFly的架构,改用Quarkus作为底层,standalone.sh是旧版WildFly时代的启动脚本,新版里根本不存在这个文件!
关于找不到standalone.sh的解释:
- 旧版Keycloak(16及以前,比如
jboss/keycloak镜像)的standalone.sh在/opt/jboss/keycloak/bin/目录下,而不是根目录的/bin/,你之前找错路径了。 - 新版Keycloak(17+,比如
quay.io/keycloak/keycloak镜像)的启动命令是start-dev(开发模式)或start(生产模式),没有standalone.sh。
关于编写带端口偏移的Dockerfile:
分两种版本处理:
情况A:使用旧版Keycloak(16及以前)
如果坚持用旧版,Dockerfile可以这么写,直接在启动命令里添加端口偏移参数:
FROM jboss/keycloak:16.1.1 # 替换默认启动命令,添加端口偏移100 CMD ["standalone.sh", "-Djboss.socket.binding.port-offset=100"]
构建后启动容器,Keycloak的所有端口都会偏移100(比如默认8080变成8180)。
情况B:使用新版Keycloak(17+)
新版没有jboss.socket.binding.port-offset这个参数了,要实现类似的端口偏移效果,直接通过环境变量指定各个端口即可。比如偏移100的话,HTTP端口设为8180,HTTPS设为8543:
FROM quay.io/keycloak/keycloak:latest ENV KC_HTTP_PORT=8180 ENV KC_HTTPS_PORT=8543 # 开发模式启动 CMD ["start-dev"]
或者你也可以在启动命令里直接指定参数:
docker run -e KC_HTTP_PORT=8180 -e KC_HTTPS_PORT=8543 quay.io/keycloak/keycloak:latest start-dev
总结一下:先确认你的Keycloak版本,新旧版本的启动方式和配置差异极大,别搞混了!
内容的提问来源于stack exchange,提问作者wwww

