M1芯片Mac在Docker容器中安装Keycloak出现SocketException报错
问题根因
- 你使用的
jboss/keycloak是官方已停止维护的 legacy 镜像,仅提供x86_64架构版本,无M1芯片对应的arm64适配。Docker在M1设备上通过Rosetta2转译运行x86镜像时,UDP协议相关的socket系统调用存在兼容缺陷,直接触发报错。 - 报错核心触发点是Keycloak依赖的WildFly组件默认开启了基于UDP的集群发现功能,转译环境不支持该操作,导致后续依赖服务全部启动失败。
解决方案
方案1(优先推荐,原生适配M1架构)
使用官方新的Quarkus架构Keycloak镜像,该镜像已原生支持arm64架构,无需转译,性能更高,启动命令如下:
docker run -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 8080:8080 quay.io/keycloak/keycloak:latest start-dev
注意:新镜像开发环境需添加
start-dev参数,生产环境需按照规范配置HTTPS、域名等相关参数。
方案2(兼容旧版jboss/keycloak镜像)
如果必须使用旧版jboss/keycloak镜像,可通过添加参数禁用UDP集群功能,强制转译运行x86版本,启动命令如下:
docker run --platform linux/amd64 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin -e JAVA_OPTS="-Djgroups.udp.enabled=false" -p 8080:8080 jboss/keycloak
内容的提问来源于stack exchange,提问作者MAYANK THAKUR
相关产品推荐
相关产品推荐

