docker - 将多个 classFile 作为参数传递给 Dockerfile
问题描述
我有一个像这样的 Dockerfile:
FROM java:8
ARG cName
ADD target/jar1.jar p2p.jar
ADD ci/docker_entrypoint.sh .
CMD ["bash", "docker_entrypoint.sh" , "$cName"]
我有一个 docker_entrypoint.sh,它看起来:
java -cp p2p.jar $1
我有多个要运行的类,并且我将 className 作为输入参数提供给 dockerfile。我正在运行几个命令来构建和运行 docker。
docker build -f Dockerfile -t docker-p2p --build-arg cName=com.HelloWorld .
docker run docker-p2p
运行第二个命令后,出现以下错误:
Error: Could not find or load main class $cName
我是 docker 新手,无法通过 dockerfile 进行参数化,但是当我在 dockerfile 中提到类名“HelloWorld”时,它运行良好。但是当我尝试传递参数时,它会抛出这个错误。
解决方案
您必须区分 docker run、cmd和entrypoint。
对于您的示例,您可以使用入口点并通过环境变量设置参数。
一个简单易用的 Dockerfile 示例可能是:
FROM java:8
ENV NAME="John Dow"
ENTRYPOINT ["/bin/bash", "-c", "echo Hello, $NAME"]
docker build . -t test
和_docker run -e NAME="test123" test
还可以查看一些进一步的文档:docker-run-vs-cmd-vs-entrypoint。
推荐阅读
- android - 我应该在哪里为 Main Activity 实现 setOnTouchListener
- java - 如果哈希图过滤器收集器java 8中的条件为真,请执行某些操作
- swift - 物理身体不只显示一个精灵?
- php - 使用名称和分数创建 PHP 表
- linux - 从 bash 或节点写入终端环境
- javascript - 将 TR 和更改焦点附加到新的 tr 输入字段
- python - 使用 BeautifulSoup 将所有图像从网站下载到指定文件夹的 Python 脚本
- twitter - 防止 twitter bot 接管页面上的直接消息
- scala - 如何在 scala 中将 DataFrame 的列值更改为标题大小写。
- go - 在嵌套地图的情况下,map.LoadOrStore 返回的地址值是否与输入相同?