docker - 使用 Entrypoint 和/或 CMD 作为 docker 文件的一部分运行 mvn 命令
问题描述
我们如何从 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 目录下)
有没有办法让它工作。
解决方案
根据文档:“如果 CMD 用于为 ENTRYPOINT 指令提供默认参数,则 CMD 和 ENTRYPOINT 指令都应使用 JSON 数组格式指定。” 因此,您应该按如下方式重写 CMD:
CMD ["clean","test","-Dsurefire.suiteXmlFiles=/app/abc.xml"]
您还可以根据文档将入口点参数化为 JSON 数组:ENTRYPOINT["mvn","clean","test","-Dsurefire.suiteXmlFiles=/app/abc。
但是,我建议您使用带有入口点 ash 文件的最佳实践。这确保更改这些参数不需要重写 dockerfile:
在代码目录中创建一个 entrypoint.sh 文件。使其可执行。它应该是这样的:
#!/bin/sh if [ "$#" -ne 1 ] then FILE="abc.xml" else FILE=$1 fi mvn clean test -Dsurefire.suiteXmlFiles="/app/$FILE"
用 ENTRYPOINT["./entrypoint.sh"] 替换你的入口点
用 CMD["abc.xml"] 替换你的命令
PS你有两次“WORKDIR /app”。这不是你失败的原因,但它是多余的,你可以摆脱它。
推荐阅读
- javascript - 过滤嵌套在一个衬里中的另一个数组中的数组
- python-3.x - 为什么我的 App Engine 应用达到 Stackdriver Logging 256KB 限制?
- objective-c - 从 MediaPlayer.framework 私有框架获取 MRMediaRemoteSendCommandToApp 的方法签名
- java - JWT 字符串必须恰好包含 2 个句点字符。找到:1(JAVA)
- java - 在整个程序中修改整数值
- javascript - 针对特定容易猜到的模式的正则表达式验证
- c# - 统一网络 | ClientRpc 在错误的播放器对象上被调用
- python - 根据Django中的数据授予权限
- python - 为什么 anaconda install 在使用 conda-forge 时会返回不同的结果?
- json - 通过 ajax post 发送大型 JSON 对象字符串