运行 mvn 命令作为 docker 文件的一部分使用入口点 and/or CMD

Run mvn commands as part of the docker file using Entrypoint and/or CMD

我们如何运行 来自 Dockerfile 的 mvn 命令

这是我的 Dockerfile:

FROM maven:3.3.9-jdk-8-alpine
WORKDIR /app
COPY code /app
WORKDIR /app
ENTRYPOINT ["mvn"]
CMD ["clean test -Dsurefire.suiteXmlFiles=/app/abc.xml"]

我尝试构建并 运行 上面的图像但它失败了(abc.xml 在 /app 目录下)

有没有办法让它工作。

根据 documentation: “如果使用 CMD 为 ENTRYPOINT 指令提供默认参数,则应使用 JSON 数组格式指定 CMD 和 ENTRYPOINT 指令。” 因此,您应该按如下方式重写 CMD:

CMD ["clean","test","-Dsurefire.suiteXmlFiles=/app/abc.xml"]

您还可以根据 documentation 将入口点参数化为 JSON 数组: 入口点["mvn","clean","test","-Dsurefire.suiteXmlFiles=/app/abc.

但是,我建议您使用带有入口点 ash 文件的最佳实践。这确保更改这些参数不需要重写 dockerfile:

  1. 在代码目录中创建一个entrypoint.sh文件。使其可执行。它应该是这样的:

    #!/bin/sh 如果 [ "$#" -ne 1 ] 然后 文件="abc.xml" 别的 文件=$1 菲 mvn clean test -Dsurefire.suiteXmlFiles="/app/$FILE"

  2. 将您的入口点替换为 ENTRYPOINT["./entrypoint.sh"]

  3. 用 CMD["abc.xml"]

    替换你的命令

PS 你有两次“WORKDIR /app”。这不是让你失望的地方,但它是多余的,你可以摆脱它。