【问题标题】:Adding a .jar License file to a Docker image's classpath?将 .jar 许可证文件添加到 Docker 映像的类路径?
【发布时间】:2019-09-30 14:43:22
【问题描述】:

我有一个 springboot 应用程序,它连接到一个 DB2 数据库,然后检索一些数据并为它提供一个 REST 端点。为了促进这一点,一个许可被添加到应用程序的类路径中,允许它与 DB2 数据库通信。这行得通。但是当我在本地构建和映像并运行该映像时,我收到一个错误,指出许可证不存在。

{
    "timestamp": 1569854043909,
    "status": 500,
    "error": "Internal Server Error",
    "exception": "org.springframework.jdbc.CannotGetJdbcConnectionException",
    "message": "Could not get JDBC Connection; nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][t4][10509][13454][4.26.14] Connection to the data server failed. The IBM Data Server for JDBC and SQLJ license was invalid \nor was not activated for the DB2 for z/OS subsystem. If you are connecting directly to \nthe data server and using DB2 Connect Unlimited Edition for System z, perform the \nactivation step by running the activation program in the license activation kit.  \nIf you are using any other edition of DB2 Connect, obtain the license file, \ndb2jcc_license_cisuz.jar, from the license activation kit, and follow the installation \ndirections to include the license file in the class path. ERRORCODE=-4230, SQLSTATE=42968",
    "path": "/test"
}

我假设这是因为许可证现在不包含在 Docker 容器类路径中。我对此进行了相当多的研究,但看不到任何关于我将如何做到这一点的指示。所以任何帮助将不胜感激。

我的许可证保存在项目根目录的 lib 文件夹中,并且是一个 jar 文件。

我的 docker 文件:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY target/mydb2jdbcproject-1.jar mydb2jdbcproject-1.jar
COPY lib/db2jcc_license_cisuz.jar db2jcc_license_cisuz.jar
#CLASSPATH: lib/db2jcc_license_cisuz.jar/
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","mydb2jdbcproject-1.jar"]

【问题讨论】:

  • 我会将 Db2 许可证文件放入您的 Db2 客户端的许可证子目录中(也应该在您的映像中),并设置 CLASSPATH 以包含该完整路径和文件名。您的问题显示许可证文件进入根目录(而不是进入 lib 目录),并且您的 Dockerfile 已将 CLASSPATH 注释掉。我会使用 ENV 来设置 CLASSPATH ,或者使用 RUN 语句来设置 CLASSPATH 等。
  • @mao 我已将它添加到 java lib 库并运行它,没有运气。然后我用ENV CLASSPATH:---- 将类路径设置到它的位置,也没有运气。

标签: java docker db2 microservices


【解决方案1】:

我最终不得不在运行之前更改用于手动设置多个类路径的 CMD,并且由于某种原因它不能与 -jar 一起使用,所以我不得不通过启动器类运行。

生成的 dockerfile 如下所示:

FROM openjdk:8-jdk-alpine
RUN mkdir -p /opt/mvp2/db2jdbc /opt/mvp2/app

COPY target/db2new-0.1.jar /opt/mvp2/app/
COPY jdbc/db2jcc4.jar  /opt/mvp2/db2jdbc/
COPY jdbc/db2jcc_license_cisuz.jar  /opt/mvp2/db2jdbc/

CMD ["java","-classpath","/opt/mvp2/db2jdbc/db2jcc4.jar:/opt/mvp2/db2jdbc/db2jcc_license_cisuz.jar:/opt/mvp2/app/db2new-0.1.jar:.","org.springframework.boot.loader.JarLauncher"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2021-04-22
    • 1970-01-01
    • 2018-11-07
    • 2015-09-27
    相关资源
    最近更新 更多