首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker,maven和settings.xml

Docker,maven和settings.xml
EN

Stack Overflow用户
提问于 2019-12-19 15:28:26
回答 1查看 16.6K关注 0票数 16

给出以下简单Dockerfile

代码语言:javascript
复制
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

我在这里复制马文(氏)码头医生中建议的马文(氏)码头医生到图像中。现在,当我运行容器时,这将失败,正如我们在这里看到的: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,然后在shell中手动运行mvn -X时,它实际上是工作的!也有预期的产出

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

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-19 16:14:46

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

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

编辑,但我仍然想知道,为什么它不适用于入口点(或运行)?

编辑2 Ok,我终于拿到了,希望它能帮到别人。maven的映像使用带有shell脚本的ENTRYPOINT,这将确保settings.xml被放置在正确的目录中。只有在启动容器实例时才会发生这种情况。

为了使它真正适用于例如RUN命令,您必须自己做一些工作。

下面是一个示例:

代码语言:javascript
复制
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
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59412695

复制
相关文章

相似问题

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