java - 将 .jar 许可证文件添加到 Docker 镜像的类路径?

标签 java docker db2 microservices

我有一个 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"]

最佳答案

我最终不得不在运行之前更改用于手动设置多个类路径的 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"]

关于java - 将 .jar 许可证文件添加到 Docker 镜像的类路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58170235/

相关文章:

ruby - 在 Linux Docker 容器上运行时出现 gsub 编码错误 US-ASCII 中的字节序列无效

java - 数据库未返回 native 生成的标识值

Java生成文本文件格式的格式化报告

java - 如何从 Connection 对象确定 DBMS

java - JMX 通知设计

docker - 如何让不同的 Docker 容器相互通信而不将端口暴露给全世界

java - 8-Puzzle Java 算法难题

node.js - ERR_NAME_NOT_RESOLVED 使用 Docker 网络在后端容器和 React 容器之间进行通信

sql - DB2 INNER JOIN OR 语句

java - 在java/jdbc中,如果在db2中包含 "for fetch only with ur",那么在执行选择后是否必须调用commit?