我们已经创建了使用keycloak保护的Spring应用程序,当我们尝试在Docker容器外运行它时,它工作正常,但当我们在两个单独的Docker容器中部署Spring应用程序和Keycloak时,它不工作:
我们的docker合成文件如下:
keycloak:
image: quay.io/keycloak/keycloak:18.0
hostname: keycloak
environment:
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://db:5432/app
KC_DB_DATABASE: app
KC_DB_USERNAME: postgres
KC_DB_SCHEMA: public
KC_DB_PASSWORD: root
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: password
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: password
KEYCLOAK_FRONTEND_URL: http://keycloak:8280
KC_HOSTNAME_STRICT: "false"
KC_EDGE: proxy
ports:
- 8280:8080
command:
- start-dev
networks:
- network
security:
container_name: security
expose:
- "9000"
ports:
- 9000:9000
depends_on:
- keycloak
environment:
- KEY_CLOAK=http://keycloak:8280
networks:
- network
networks:
network:
driver: bridge
keycloak json文件如下所示:
{
"realm": "Default",
"auth-server-url": "${KEY_CLOAK}/",
"ssl-required": "external",
"resource": "Default",
"verify-token-audience": true,
"credentials": {
"secret": "mlqYrlT2UBmKp2dcfgfdzi5xFnF35lJ"
},
"use-resource-role-mappings": true,
"principal-attribute": "preferred_username"
}
在Docker容器中部署后,我们尝试在浏览器中访问它,它在安全应用程序中出现以下错误:
2023-02-20 15:08:50.934 WARN 1 --- [qtp993370665-30] o.keycloak.adapters.KeycloakDeployment
: Failed to load URLs from http://keycloak:8280/realms/Default/.well-known/openid-configuration
org.apache.http.conn.HttpHostConnectException: Connect to keycloak:8280 [keycloak/172.31.0.5] failed: Connection refused
java.lang.NullPointerException: Cannot invoke "org.keycloak.common.util.KeycloakUriBuilder.clone()" because the return value of "org.keycloak.adapters.KeycloakDeployment.getAuthUrl()" is null
我知道有一些丢失的配置,但我无法找到它。请帮助任何人知道它。
2条答案
按热度按时间j7dteeu81#
我认为当你在docker compose创建的docker网络内部时,你只能使用像
http://keycloak:8280
这样的url,而在外部(比如浏览器)你需要使用localhost。ltskdhd12#
这里的问题是端口。您正在尝试访问您的keycloak * 在您的docker网络 * 内的端口8280。但8280实际上是用于从您的主机 * 访问docker网络 * 的端口。如果您想通过keycloak主机名访问keycloak,您需要使用在网络内使用的端口,即8080。