运行 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:
在代码目录中创建一个entrypoint.sh文件。使其可执行。它应该是这样的:
#!/bin/sh
如果 [ "$#" -ne 1 ]
然后
文件="abc.xml"
别的
文件=$1
菲
mvn clean test -Dsurefire.suiteXmlFiles="/app/$FILE"
将您的入口点替换为 ENTRYPOINT["./entrypoint.sh"]
用 CMD["abc.xml"]
替换你的命令
PS
你有两次“WORKDIR /app”。这不是让你失望的地方,但它是多余的,你可以摆脱它。
我们如何运行 来自 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:
在代码目录中创建一个entrypoint.sh文件。使其可执行。它应该是这样的:
#!/bin/sh 如果 [ "$#" -ne 1 ] 然后 文件="abc.xml" 别的 文件=$1 菲 mvn clean test -Dsurefire.suiteXmlFiles="/app/$FILE"
将您的入口点替换为 ENTRYPOINT["./entrypoint.sh"]
用 CMD["abc.xml"]
替换你的命令
PS 你有两次“WORKDIR /app”。这不是让你失望的地方,但它是多余的,你可以摆脱它。