在docker中使用外部jar依赖
Posted
技术标签:
【中文标题】在docker中使用外部jar依赖【英文标题】:using external jar dependency in docker 【发布时间】:2020-01-27 23:48:52 【问题描述】:我正在使用通过 scope = system 添加的外部 jar,其中 $basedir/src/main/java/... 添加为 pom.xml 中的依赖子组下的系统路径。 每当我从 IntelliJ 本地使用项目时,都没有警告或错误。但是,当我尝试从 docker 容器启动 .jar 文件时,我得到了有关依赖项的异常。
我已经尝试通过 IntelliJ 中项目结构下的库添加罐子,并且只是将罐子添加到根目录下的 libs 文件夹中。 首先我提供了绝对路径,但后来我将其更改为 $basedir 因为绝对路径没有映射为 docker 容器上的卷。 有什么方法可以将外部 jar 与项目 jar 打包,以便我可以在 docker 容器中使用它?
【问题讨论】:
提供异常详情。 在主项目中,我从外部 jar 调用类的构造函数,但无法解析导入。 您需要向我们展示您是如何创建关于该部分的 docker 映像的。 它使用官方 flink docker 镜像的简单镜像,我只是将 jars 复制到其中.. FROM flink:1.9 COPY ./jars ./jars 【参考方案1】:IIUC 你至少有两个选择:
1。将 JAR 添加到新图像(根据上面的 @LexByte 建议)。
假设 JAR 在您的主机上的 $PWD/jars
中,并且您希望它们在容器中的 $WORKDIR/jars
中:
FROM [[original-image]]
WORKDIR ...
COPY ./jars ./jars
然后,确保您的代码通过 [[WORKDIR]]/jars/[[some-jar]]
引用 JAR
NB [[WORKDIR]]
是您设置为容器工作目录的任何内容。
2。使用现有镜像将 JAR 挂载到容器中:
docker run ... --volume=$PWD/jars:[[WORKDIR]]/jars ...
NB [[WORKDIR]]
是您将用作容器工作目录的任何内容。这是将 JAR 安装到容器中的位置。
【讨论】:
我设法通过在 maven m2 文件夹中本地安装 jar 来解决问题。将 jars 添加为外部库,并在具有范围运行时的依赖项中引用它们。构建主项目 jar 将这些库包含在大 jar 中。之后我不需要在 docker 镜像中添加 jars。以上是关于在docker中使用外部jar依赖的主要内容,如果未能解决你的问题,请参考以下文章
docker使用Dockerfile把springboot项目jar包生成镜像并运行