首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用卷时,将文件从url添加到docker映像将以不同的结果结束。

当使用卷时,将文件从url添加到docker映像将以不同的结果结束。
EN

Stack Overflow用户
提问于 2021-07-20 12:23:46
回答 1查看 136关注 0票数 0

我想在Oracle中使用Keycloak最新版本(14.0.0) Docker映像,据我所知,Oracle驱动程序中没有提供jboss/keycloak:14.0.0映像。

首先,我将驱动程序添加到适当的目录中,作为文件中的卷。

代码语言:javascript
复制
  keycloak:
    image: jboss/keycloak:14.0.0
    ports:
      - 9080:8080
      - 9443:8443
    networks:
      - bifrost
    environment:
      ...
    volumes:
      - ./jdbc:/opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main/driver
    depends_on:
      oracle-db:
        condition: service_healthy

我将文件下载到jdbc目录中,并将jar重命名为ojdbc.jar,这是他们在描述中推荐的。

在我试图将它推送到远程之前,它工作得很好,因为文件大小太大,远程git主机光荣地拒绝了它。我们不能改变这个限制,所以我能找到的最好的解决方案是构建映像,因为ADD命令可以从web获取资源并添加到映像中。

这就是我想出来的:

代码语言:javascript
复制
FROM jboss/keycloak:14.0.0

ADD https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc8/12.2.0.1/ojdbc8-12.2.0.1.jar /opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main/driver/ojdbc.jar

docker-sompose.yml

代码语言:javascript
复制
  keycloak:
    build:
      context: ./keycloak
    ports:
      - 9080:8080
      - 9443:8443
    networks:
      - bifrost
    environment:
      ...
    depends_on:
      oracle-db:
        condition: service_healthy

但是,如果使用此解决方案,Keycloak无法启动,则始终会出现以下错误:

11:54:39,493启动时的致命org.keycloak.services错误: java.lang.RuntimeException:连接数据库失败

因此,Keycloak应用程序的行为就像没有Oracle JDBC驱动程序一样,当我像以前一样将驱动程序添加回卷时,它就工作得很好。

我完全不知道为什么会发生这种情况,这两种情况有什么不同?

据我所知,这两种情况都不应该有任何不同,而且应该工作得很好。

jdbc dir中的jar与我在Dockerfile中添加的jar完全相同

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-20 16:19:26

我猜:

https://docs.docker.com/engine/reference/builder/#add

如果

是远程文件URL,则目标的权限为600。

测试:

代码语言:javascript
复制
$ ls -lah  /opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main/driver/ojdbc.jar
-rw------- 1 root root 3.9M Feb 21  2020 /opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main/driver/ojdbc.jar

来自官方Docker映像的密钥披风在用户ID 1000下运行,而不是在root用户下运行。因此,Keycloak无法看到下载的驱动程序,而Keycloak应用程序的行为就像没有Oracle JDBC驱动程序一样。这是不同的。对驱动程序文件的权限。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68454840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档