Docker、maven和settings.xml [英] Docker, maven and settings.xml

查看:25
本文介绍了Docker、maven和settings.xml的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给定以下简单的Dockerfile

FROM maven:3.6.3-ibmjava-8-alpine 

# Copy maven settings
COPY settings.xml /usr/share/maven/ref/
COPY pom.xml .

# WHY IS settings.xml HERE NOT CONSIDERED?
ENTRYPOINT ["mvn -X"]

# WHY IS settings.xml HERE NOT CONSIDERED?
#OR: RUN mvn clean install deploy
我在这里将maven's docker doc中建议的settings.xml复制到图像中。现在,当我运行容器时,这将失败并显示:Could not find artifact com.my.artefactory:my-parent:pom:2.0.2 in central (https://repo.maven.apache.org/maven2) 正如我们在这里所看到的,尽管我在设置文件中定义了我自己的maven repo,但是maven还是尝试从默认的maven repo中解决问题。

当我删除ENTRYPOINT ["mvn -X"]并连接到容器docker run --rm -it mvn-builder sh,然后在外壳中手动运行mvn -X时,它实际上起作用了!还有预期的输出

[DEBUG] Using mirror my-mirror (https://com.my.artefactory/repository/whatever-repo/) for central (http://central).

我在这里错过了什么?

推荐答案

我认为问题实际上在于我从maven:3.6.3-ibmjava-8-alpine派生的图像已经定义了ENTRYPOINT

当我运行docker run -it --rm my-image-mvn mvn clean install deploy时,它工作得很好-对我来说已经足够好了...

编辑 但我仍然想知道,为什么这对入口点(或运行)不起作用?

编辑2 好的,我终于明白了,希望它能帮助其他人。Maven的图像使用带有外壳脚本的ENTRYPOINT,这将确保settings.xml被放置到正确的目录中。只有在启动容器实例时才会出现这种情况。
为了使它真正对RUN命令起作用,您必须自己做一些工作。

举个例子:

FROM maven:3.6.3-ibmjava-8-alpine AS maven-builder

# Since we want to execute the mvn command with RUN (and not when the container gets started),
# we have to do here some manual setup which would be made by the maven's entrypoint script
RUN mkdir -p /root/.m2 
    && mkdir /root/.m2/repository
# Copy maven settings, containing repository configurations
COPY settings.xml /root/.m2

...

RUN mvn clean install

这篇关于Docker、maven和settings.xml的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆