docker run ... start --optimized
启动Keycloak生产docker服务器容器(遵循Keycloak的“在容器中运行Keycloak”指南
),但是,使用exact相同的KC_DB_URL变量(它是用图像构建的)由 Dockerfile 制作)我收到错误
Datasource '<default>': Driver does not support the provided URL: jdbc:postgresql://pgkeydb/keycloak
这怎么可能?我搜索了有关设置的帖子,并尝试设置 ip 而不是服务名称,但它违背了它与 run
命令一起使用但不使用
docker compose up -d
命令的逻辑...以下是我正在使用的设置文件。除了无法连接数据库之外没有其他错误。我尝试添加特定的 postgres 驱动程序作为 ENV 变量,没有区别。尝试再次更改用户/数据库等的名称,但没有变化。
Dockerfile(根据 Keycloak 指南加上添加的 ssl 证书)
FROM quay.io/keycloak/keycloak:25.0.1 as builder
VOLUME keycloak-data:/opt/keycloak/
ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true
ENV KC_DB=postgres
WORKDIR /opt/keycloak
COPY --chown=1000:0 certs/fullchain.pem /opt/keycloak/fullchain.pem
COPY --chown=1000:0 certs/privkey.pem /opt/keycloak/privkey.pem
RUN /opt/keycloak/bin/kc.sh build
FROM quay.io/keycloak/keycloak:25.0.1
COPY --from=builder /opt/keycloak/ /opt/keycloak/
ENV KC_FEATURES=hostname:v2
ENV KC_DB_URL=jdbc:postgresql://pgkeydb/keycloak
ENV KC_DB_USERNAME=postgres
ENV KC_DB_PASSWORD=some_strong_password
ENV KC_HOSTNAME=keycloak.tld.com
ENV KC_HOSTNAME_PORT=58443
ENV KC_HTTPS_CERTIFICATE_FILE=/opt/keycloak/fullchain.pem
ENV KC_HTTPS_CERTIFICATE_KEY_FILE=/opt/keycloak/privkey.pem
ENTRYPOINT ["/opt/keycloak/bin/kc.sh"]
Docker compose(无法连接到数据库,是的,该数据库正在运行并且使用 docker run
可以正常连接):
services:
keycloak:
build: .
container_name: service-keycloak
command: start --optimized
restart: always
env_file: "keycloak.env"
depends_on:
- pgkeydb
ports:
- 58080:8080
- 58443:8443
- 59000:9000
volumes:
- keycloak-data:/opt/keycloak
networks:
- keycloak-network
pgkeydb:
image: postgres:16
container_name: keycloak-postgres
restart: always
env_file: "pgres.env"
volumes:
- pgkeydb-data:/var/lib/postgresql/data
networks:
- keycloak-network
volumes:
keycloak-data:
pgkeydb-data:
networks:
keycloak-network:
name: keycloak-network
Docker 运行连接,运行良好:
docker run -d --name service-keycloak --net keycloak-network -p 58080:8080 -p 58443:8443 -p 59000:9000 -e KEYCLOAK_ADMIN=keyadmin -e KEYCLOAK_ADMIN_PASSWORD=some_strong_password -v keycloak-data service-keycloak start --optimized --verbose
Keycloak.env 文件
KEYCLOAK_ADMIN_USER: admin_user
KEYCLOAK_ADMIN_PASSWORD: some_strong_password
KEYCLOAK_FRONTEND_URL="https://keycloak.tld.com"
尝试过:
docker build . -t service-keycloak
docker compose up -d
(构建/使用正确的图像,但遇到数据库错误)
build: .
文件中使用
docker-compose
,从
docker compose up -d
构建并运行服务
唯一方式是使用docker run...
命令(在具有相同环境变量的完全相同的构建图像上!)
--optimized
强制使用 H2 数据库的内容,但我找不到那篇文章,而且我在日志或
docker inspect
中找不到任何引用 H2 的内容,所以不确定这是否是问题,如果是的话如何解决......
首先构建 Dockerfile 镜像:
docker build . -t keycloak:23.0.1
然后将 build: .
与我的
image: keycloak:23.0.1
中的 docker-compose.yml
交换
然后它将使用从 docker build...