Chr*_*hie 5 postgresql docker keycloak
我有两个 docker 容器,一个运行 Keycloak 4.7.0.Final,一个运行 Postgresql。
Keycloak Dockerfile
FROM jboss/keycloak:4.7.0.Final
ADD themes/mytheme /opt/jboss/keycloak/themes/healthjoiner
ADD modules /opt/jboss/keycloak/modules/system/layers/keycloak
ADD standalone-ha.xml /opt/jboss/keycloak/standalone/configuration/
ADD keycloak-config.json /opt/jboss/
RUN mkdir -p $JBOSS_HOME/standalone/data
CMD ["-b", "0.0.0.0", "-Dkeycloak.migration.action=import -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=/opt/jboss/keycloak-config.json -Dkeycloak.migration.strategy=OVERWRITE_EXISTING"]
Run Code Online (Sandbox Code Playgroud)
Postgres Dockerfile
FROM postgres:9.5
# set root user details
ENV POSTGRES_PASSWORD=postgres
ENV POSTGRES_USER=postgres
ADD scripts/init.sql /docker-entrypoint-initdb.d/
# expose the 5432 port to outside the container
EXPOSE 5432
Run Code Online (Sandbox Code Playgroud)
这是 standalone-ha.xml 文件中的一个有问题的部分,特别是connection-url值。
<subsystem xmlns="urn:jboss:domain:datasources:5.0">
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true"
use-java-context="true">
<connection-url>jdbc:postgresql://my-net/keycloak</connection-url>
<driver>postgresql</driver>
<pool>
<max-pool-size>20</max-pool-size>
</pool>
<security>
<user-name>keycloak</user-name>
<password>sa</password>
</security>
</datasource>
<drivers>
<driver name="postgresql" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
</subsystem>
Run Code Online (Sandbox Code Playgroud)
Postgres 启动良好。当我启动 Keycloak 时,我得到java.net.UnknownHostException: my-net. 我也试过localhost并得到同样的错误。
最后,我根据docker 网络指南创建了一个用户定义的桥接网络
docker network create --driver bridge my-net
Run Code Online (Sandbox Code Playgroud)
我遵循了指南,但我无法通过 keycloak 找到 postgresql 数据库。根据我的理解,网络my-net应该在运行 keycloak 的容器内部可用。
任何帮助将不胜感激。谢谢
Postgres 是从以下内容开始的:
docker run --name postgresql -p 5432:5432 --network my-net postgresql
Run Code Online (Sandbox Code Playgroud)
和keycloak:
docker run --name keycloak -p 8080:8180 --network my-net keycloak
Run Code Online (Sandbox Code Playgroud)
我的建议:不要仅为主题/模块创建自己的 Docker 映像。使用官方 Keycloak 映像并将您的自定义文件挂载为卷 => 您将可以更轻松地进行映像更新。官方镜像还提供了数据库配置环境变量,因此您不需要使用自定义的配置文件:
docker run -d \
--name keycloak \
--net my-net \
-p 8080:8080 \
-p 443:8443 \
-v $PWD/themes/mytheme:/opt/jboss/keycloak/themes/healthjoiner \
-v $PWD/modules:/opt/jboss/keycloak/modules/system/layers/keycloak \
-e DB_VENDOR=postgres \
-e DB_ADDR=postgresql \
-e DB_PORT=5432 \
-e DB_DATABASE=<DB> \
-e DB_USER=<DBUSER> \
-e DB_PASSWORD=<DBPASSWORD> \
jboss/keycloak:4.7.0.Final
Run Code Online (Sandbox Code Playgroud)
请参阅文档: https: //hub.docker.com/r/jboss/keycloak
无论如何,您的情况下的连接 URL 是(仅使用容器名称):
jdbc:postgresql://keycloak:5432/<DATABASE>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5455 次 |
| 最近记录: |