首页 > 解决方案 > 将多个 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”时,它运行良好。但是当我尝试传递参数时,它会抛出这个错误。

标签: dockerdockerfile

解决方案


您必须区分 docker runcmdentrypoint

对于您的示例,您可以使用入口点并通过环境变量设置参数。

一个简单易用的 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


推荐阅读