Keycloak 生产 Docker 站点能够连接到 postgres 并使用 docker run 运行,但在使用 docker-compose 文件时无法运行

问题描述 投票:0回答:1
非常奇怪的情况,我可以使用

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"
尝试过:

    jdbc连接字符串的众多组合,包括数据库服务的ip
  • Dockerfile 中的 ENV 也放置在 Keycloak.env 文件中
尝试过的过程:

  • 跑步

    docker build . -t service-keycloak

    
    

  • 将构建镜像引用为镜像:service-keycloak

  • 然后

    docker compose up -d

    (构建/使用正确的图像,但遇到数据库错误)

  • build: .

     文件中使用 
    docker-compose
    ,从 
    docker compose up -d
     构建并运行服务
    

  • 构建良好的 postgres 启动等,但再次出现数据库错误

  • 我能够看到容器连接到 postgres 的

    唯一方式是使用docker run...

    命令(在具有相同环境变量的完全相同的构建图像上!)

有人有什么想法吗?我似乎记得在查看其他问题时阅读过有关

--optimized

 强制使用 H2 数据库的内容,但我找不到那篇文章,而且我在日志或 
docker inspect
 中找不到任何引用 H2 的内容,所以不确定这是否是问题,如果是的话如何解决......

postgresql docker keycloak
1个回答
0
投票
现在解决了!我忘记了最重要的一步,首先构建优化的图像!无论如何,以下是我需要做的(以防其他人有一天偶然发现同样的问题..):

首先构建 Dockerfile 镜像:

docker build . -t keycloak:23.0.1
然后将 

build: .

 与我的 
image: keycloak:23.0.1
 中的 
docker-compose.yml
交换

然后它将使用从

docker build...

 创建的优化图像

是的,愚蠢的错误,感谢那些试图提供帮助的人!

© www.soinside.com 2019 - 2024. All rights reserved.